我正在开发一个Android应用程序,其中我有一个ImageView,它直接在XML中设置(默认图像)。现在,当用户点击图像时,我想仅使用另一个图像来更改它,以便用户知道它被按下了。当我查找时,我可以找到onClickListener,但是这会更改图像并且不会恢复为旧图像。我只想找到一些方法来显示按钮被按下。
XML代码:
seen = set()
not_seen = lambda x: not(x in seen or seen.add(x))
{key: data[key] for key in data if not_seen(key.split(":")[0])}
# {'ip1:port1': 'value1', 'ip2:port1': 'value3'}
活动代码:
<ImageView
android:id="@+id/shirtImage"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:alpha="0.8"
android:src="@drawable/shirt" />
谢谢。
更新了代码
@Override
protected void onCreate(Bundle savedInstanceState) {
shirt = (ImageView)findViewById(R.id.shirtImage);
shirt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
shirt.setImageResource(R.drawable.shirtactive);
}
});
}
答案 0 :(得分:2)
您可以在drawable文件夹中创建一个xml文件(例如,名称为selector_imageview),其中包含以下内容
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shirtactive" android:state_pressed="true" />
<item android:drawable="@drawable/shirtactive" android:state_selected="true" />
<item android:drawable="@drawable/shirt"/>
</selector>
并在ImageView中设置
<ImageView
android:id="@+id/shirtImage"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:alpha="0.8"
android:src="@drawable/selector_imageview" />
答案 1 :(得分:0)
在drawable文件夹中创建一个选择器并将其设置为source。 创建image_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/pressed_image" android:state_pressed="true"/>
<item android:drawable="@drawable/default_image"/>
</selector>
然后在布局中,
<ImageView
android:id="@+id/shirtImage"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:layout_gravity="center"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:alpha="0.8"
android:src="@drawable/image_selector" />
答案 2 :(得分:0)
您会看到,只有在您单击View时,onClickListener才会运行其回调。这意味着,你按下它,然后足够快地释放它。在您的情况下,您有两个选择:
变体I
以编程方式实现您需要调用setOnTouchListener
并在onTouch
回调中,您需要检查MotionEvent操作。如果它是DOWN,那么你需要改变你的图像并“按下”一个,如果UP,然后再改回你的。
变体II
您需要在此模板中提供xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/pressed_image" android:state_pressed="true"/>
<item android:drawable="@drawable/default_image"/>
</selector>
这将为您提供所需的效果。另外,我建议你使用这种方法,因为它更少的样板和更灵活,因为:
<强>更新强>
如果要在将视图状态从“默认”更改为“按下”时使用动画,反之亦然,则需要使用变体I.以下是示例:
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
//make fade-in animation here
return true;
case MotionEvent.ACTION_UP:
//make fade-out animation here
return true;
default:
return false;
}
}
});
答案 3 :(得分:0)
现在,当用户点击图片时,我想用它进行更改 只有另一个图像,所以用户知道它被按下了。
然后你想在两个图像之间切换。您想将CheckBox
的行为应用于ImageView
。 Yon可以跟踪当前的图像集,例如使用View#setTag
和View#getTag
,或者使用ImageView子类,让它实现接口Checkable。这样,您就可以拥有状态为android:state_checked
的选择器。我会选择后者,即使前者很容易实现
答案 4 :(得分:0)
我希望这段代码可以帮到你。您需要在ACTION_UP上将图像重置为默认图像
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
// Press stat
return true;
}
else if(event.getAction() == MotionEvent.ACTION_UP){
// Relese Stat
return true;
}
return false;
}
});
答案 5 :(得分:0)
另一个答案可以满足您的目的。但我建议使用svg文件作为drawble并在imageview属性中使用tint模式。这是主要用于材料设计的最佳方式。