如何比较两个drawables,我这样做但没有取得任何成功
public void MyClick(View view)
{
Drawable fDraw = view.getBackground();
Drawable sDraw = getResources().getDrawable(R.drawable.twt_hover);
if(fDraw.equals(sDraw))
{
//Not coming
}
}
Run Code Online (Sandbox Code Playgroud)
小智 149
getConstantState()工作得不好
还有另一种比较方式:
mRememberPwd.getDrawable().getConstantState().equals
(getResources().getDrawable(R.drawable.login_checked).getConstantState());
Run Code Online (Sandbox Code Playgroud)
mRemeberPwdImageView在这个例子中是一个.如果您使用的是TextView,请getBackground().getConstantState改用.
vau*_*oid 38
getConstantState()单独依靠可能导致漏报.
我采用的方法是尝试比较第一个实例中的ConstantState,但如果检查失败则返回Bitmap比较.
这应该适用于所有情况(包括非资源的图像),但请注意它是内存饥饿.
public static boolean areDrawablesIdentical(Drawable drawableA, Drawable drawableB) {
Drawable.ConstantState stateA = drawableA.getConstantState();
Drawable.ConstantState stateB = drawableB.getConstantState();
// If the constant state is identical, they are using the same drawable resource.
// However, the opposite is not necessarily true.
return (stateA != null && stateB != null && stateA.equals(stateB))
|| getBitmap(drawableA).sameAs(getBitmap(drawableB));
}
public static Bitmap getBitmap(Drawable drawable) {
Bitmap result;
if (drawable instanceof BitmapDrawable) {
result = ((BitmapDrawable) drawable).getBitmap();
} else {
int width = drawable.getIntrinsicWidth();
int height = drawable.getIntrinsicHeight();
// Some drawables have no intrinsic width - e.g. solid colours.
if (width <= 0) {
width = 1;
}
if (height <= 0) {
height = 1;
}
result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Ros*_*Jha 12
我的问题是只是比较两个drawable,我尝试但无法得到任何直接比较两个drawables的方法,但是对于我的解决方案我改变drawable到位图然后比较两个位图,这是有效的.
Bitmap bitmap = ((BitmapDrawable)fDraw).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable)sDraw).getBitmap();
if(bitmap == bitmap2)
{
//Code blcok
}
Run Code Online (Sandbox Code Playgroud)
适用于SDK 21+
这适用于SDK -21
mRememberPwd.getDrawable().getConstantState().equals
(getResources().getDrawable(R.drawable.login_checked).getConstantState())
Run Code Online (Sandbox Code Playgroud)
for SDK +21 android 5.将drawable id设置为带有标记的imageview
img.setTag(R.drawable.xxx);
Run Code Online (Sandbox Code Playgroud)
和这样比较
if ((Integer) img.getTag() == R.drawable.xxx)
{
....your code
}
Run Code Online (Sandbox Code Playgroud)
这个解决方案适合谁想要比较drawableid的imageviewid drawable.xxx.
| 归档时间: |
|
| 查看次数: |
48760 次 |
| 最近记录: |