我有一个图像按钮作为开/关按钮,我想在点击打开和关闭之间切换它的源图像,我所要做的就是在我的点击监听器和一个开关中进行比较操作,转换顺利,这里的问题是与比较,我试过百万种方式,一切都没有用,
例如我试过:
public void onClick(View v) {
if (v == power) {
Drawable fDraw = power.getBackground();
Drawable sDraw = getResources().getDrawable(R.drawable.acoffdormant);
Bitmap bitmap = ((BitmapDrawable)fDraw).getBitmap();
Bitmap bitmap2 = ((BitmapDrawable)sDraw).getBitmap();
if (bitmap == bitmap2) {
power.invalidateDrawable(getResources().getDrawable(R.drawable.acoffdormant));
power.setImageResource(R.drawable.acondormant);
} else {
power.invalidateDrawable(getResources().getDrawable(R.drawable.acondormant));
power.setImageResource(R.drawable.acoffdormant);
}
}
}
};
还有:
if (getResources().getDrawable(R.drawable.acoffdormant).hashCode() == power.getBackground().hashCode())
另外:
v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.acoffdormant).getConstantState())
另外:
Drawable state = power.getBackground();
Bitmap statebit = ((BitmapDrawable)state).getBitmap();
Bitmap off = BitmapFactory.decodeResource(power.getResources(),
R.drawable.acoffdormant);
if (statebit == off) {
power.invalidateDrawable(getResources().getDrawable(R.drawable.acoffdormant));
power.setImageResource(R.drawable.acondormant);
} else {
power.invalidateDrawable(getResources().getDrawable(R.drawable.acondormant));
power.setImageResource(R.drawable.ac_fan);
}
另外:
if (power.getBackground().getConstantState().equals
(getResources().getDrawable(R.drawable.acoffdormant).getConstantState()))
我的 XML :
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="10dp"
android:layout_marginTop="20dp"
android:background="@android:color/transparent"
android:text="@string/power"
android:textColor="#00CCCC"
android:textSize="20dp"
android:textStyle="bold" />
<ImageButton
android:id="@+id/power"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:clickable="true"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:scaleType="centerInside"
android:src="@drawable/acoffdormant" />
</LinearLayout>
答案 0 :(得分:2)
您可以使用选择器动态更改图像按钮/按钮
Selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/existing_image" />
<item android:drawable="@drawable/new_image" />
</selector>
或者您可以点击按钮将visibilty设置为 GONE / VISIBLE
答案 1 :(得分:2)
使用一个这样的标志变量,
boolean flag = false;
public void onClick(View v) {
if(v == power) {
if (boolean) {
power.setImageResource(R.drawable.acondormant);
boolean = false;
} else {
power.setImageResource(R.drawable.acoffdormant);
boolean = true;
}
}
};
答案 2 :(得分:1)
你试过了吗?
power.setBackgroundResource(R.drawable.yourResource)
还从xml中删除后台资源
删除
android:src="@drawable/acoffdormant"
改为设置
power.setBackgroundResource(R.drawable.acoffdormant)
//在oncreate中
答案 3 :(得分:1)
您可以使用tag attribute
提供的imageButton
..
默认情况下,您的xml会将代码标记为关闭 ..
<ImageButton
android:id="@+id/power"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:clickable="true"
android:adjustViewBounds="true"
android:background="@android:color/transparent"
android:scaleType="centerInside"
android:src="@drawable/acoffdormant"
android:tag="off" />
然后点击按钮:
public void onClick(View v) {
String tag = power.getTag().toString().trim();
if(tag.equals("off"))
{
power.setImageResource(R.drawable.acondormant);
power.setTag("on");
}
else if(tag.equals("on"))
{
power.setImageResource(R.drawable.acoffdormant);
power.setTag("off");
}
}
};
答案 4 :(得分:1)
有两种方法可以做到这一点。
B_cancelSearch.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
v.setBackgroundResource(R.drawable.button_pressed);
break;
case MotionEvent.ACTION_UP: {
v.setBackgroundResource(R.drawable.button_normal);
}
break;
}
return false;
}
});
另一种方法是使用一个可绘制的选择器作为答案中提到的AndroidHacker。
答案 5 :(得分:0)