2016-07-25 34 views
1

我正在Android应用程序中,我有一个ImageView,它直接在XML中设置(默认图像)。现在,当用户点击图片时,我想只用另一张图片进行更改,以便用户知道它已被按下。当我抬头时,我可以找到onClickListener,但是这改变了图像,并且不会恢复到原来的。我只是想找一些方法来显示按钮被按下。Android:更改图像,当用户单击并将其设置为原始

XML代码:

<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); 
      } 
     }); 

    } 

谢谢。

更新代码

shirt.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_DOWN){ 
        shirt.startAnimation(animationFadeIn); 
        shirt.setImageResource(R.drawable.shirtactive); 
        return true; 
       } 
       else if(event.getAction() == MotionEvent.ACTION_UP){ 
        shirt.startAnimation(animationFadeOut); 
        shirt.setImageResource(R.drawable.shirt); 
        return true; 
       } 
       return false; 
      } 
     }); 

回答

0

创建可绘制文件夹的选择器,并设置为源。 创建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

您可以用下面的内容

<?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> 
创建一个在您绘制文件夹中的XML文件(名称selector_imageview为例)

并设置在您的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" /> 
0

您会发现,onClickListener仅在您单击View时才会运行其回调。这意味着,你按下了它,然后快速释放它。你的情况,你有两个选择:

变我

实现以编程方式,你需要调用setOnTouchListeneronTouch回调,你需要检查MotionEvent行动。如果它是向下的,那么你需要改变你的图像并“按下”一个,如果是UP,那么就改回你的图像。

变II

您需要提供XML withi这个模板:

<?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(例如,对于版本大于等于21的版本,在按下时不提供简单的变化图像,但是连锁效果,或者一个国家为另一个按下的图像创建一个按下的图像)。

更新

如果您想使用的动画时改变视图状态从“默认”为“压制”,反之亦然,你需要使用变一,下面是示例:

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; 
     } 
    } 
}); 
+0

如何使用此功能获得印刷机的淡入效果? –

+0

@ WeareBorg如果您将使用第一个变体,那么在动作下降和动作上可以做任何你想做的事情。我会在我的回答中添加示例 –

0

现在,当用户点击图片时,我想只用 来改变它,所以用户知道它被按下了。

然后你想在两个图像之间切换。您想要将CheckBox的行为应用于ImageView。 Yon可以跟踪当前的图像集,例如使用View#setTagView#getTag或ImageView的子类,并让它实现Checkable接口。这样你可以有一个选择器,状态为android:state_checked。我宁愿为后者,即使前者很容易实现

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; 
} 
}); 
+0

检查了这一点 –

+0

很酷,这很好。您可能知道任何用于淡入淡出的动画?持续时间非常短,看起来并不那么顺利。谢谢。 –

+0

我想你需要看看这个[链接](http://android-er.blogspot.in/2012/02/animate-fade-infade-out-by-changing.html) – Elango

0

其他答案对您的目的没问题。但我建议使用svg文件作为drawable,并在imageview属性中使用tint模式。这是主要用于材料设计的最佳方式。

+0

üü当然?实际上,AppComapt库具有向后兼容性。所以认为色调适合向后兼容 –

相关问题