Android:用户点击时更改图片,然后将其设置为原始图片

时间:2016-07-25 10:59:56

标签: java android imageview android-imageview

我正在开发一个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);
            }
        });

    }

6 个答案:

答案 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>

这将为您提供所需的效果。另外,我建议你使用这种方法,因为它更少的样板和更灵活,因为:

  • 您可以为他们提供其他状态和图像,例如“聚焦”状态或“选定”状态
  • 您可以使用更具体的xml来覆盖此xml(例如,对于版本&gt; = 21,并且不提供简单的更改图像,但是涟漪效果,或者一个国家/地区生成一个按下的图像,另一个按下的图像)

<强>更新

如果要在将视图状态从“默认”更改为“按下”时使用动画,反之亦然,则需要使用变体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#setTagView#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模式。这是主要用于材料设计的最佳方式。