按下时更改图像视图的源图像

问题描述:

我有一个带有大量图像按钮的滚动视图。我想在按下按钮时更改图像按钮的图像。事情是,我希望图像保持到另一个图像按钮被按下。这就是为什么我不能使用选择器。实现他的最佳做法是什么?按下时更改图像视图的源图像

问候

你想这样做。

ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage); 

// when you click this demo button 
Demo_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     Demo_button.setImageResource(R.drawable.secondimage); 
    } 
} 

试试这个。 (更新的设置集)

+0

嗨PrashantAdesara。我知道这将工作(我将不得不设置为先前点击查看未选中的图像)。我以更自然的方式思考。就像创建自定义图像视图并在其中设置当前资源图像一样(例如在setSelected方法中)。问题是我需要一个视图方法,当视图被选中和未选中时被调用。希望这是明确的。 – Gratzi 2010-11-16 11:24:53

ImageButton Demo_button = (ImageButton)findViewById(R.id.firstimage); 
ImageButton second_button = (ImageButton)findViewById(R.id.secondimage); 

// when you click this demo button 
Demo_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    Demo_button.setImageResource(R.drawable.secondimage); 
    second_button.setImageResource(R.drawable.firstimage); 
    } 
} 

second_button.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     Demo_button.setImageResource(R.drawable.firstimage); 
     second_button.setImageResource(R.drawable.secondimage); 
    } 
} 

我希望你想要那样 对吗?

+0

不是。我正在寻找一个带有视图的滚动视图,其中,如果您选择一个视图,最后一个选定的视图将被取消选中。您的示例适用于2个按钮,并且选择是手动完成的。 – Gratzi 2010-11-18 07:46:26

如果在点击后保存选择,然后重新加载图像滚动画廊(或滚动菜单),然后重新加载并使用替换图像滚动到所选内容,则可能可以完成此操作。就我所知,内置的图库或菜单功能在加载和显示后都不能替换图像。

+0

我正在考虑像创建一个自定义按钮,并使用一种方法(如onSelected,但选择另一个按钮时用false调用)来设置当前图像。 – Gratzi 2010-11-22 07:25:58

的OnTouchListener很多更好的是你必须做的:

myImageButton.setOnTouchListener(new OnTouchListener(){ 

       public boolean onTouch(View v, MotionEvent event) { 
        switch(event.getAction()) 
        { 
        case MotionEvent.ACTION_DOWN : 
myImageButton.setImageResource(R.drawable.image_when_pressed); 
         break; 
        case MotionEvent.ACTION_UP : 
myImageButton.setImageResource(R.drawable.image_when_released); 
         break; 
        } 
        return false; 
       } 

      }); 
+0

这比在'onClick()'中一个接一个地调用'image.setImageResource(R.drawable.image_when_pressed)'和'image.setImageResource(R.drawable.image_when_released)'要好。如果用户持有图片,资源将保持'image_when_pressed'直到他们释放按钮 – 2014-05-07 14:58:42

可以使用StateListDrawable实现这一目标。此方法也适用于ImageButton s。我更喜欢它设置额外的听众。

我还编一类的额外助手:http://alexanderwong.me/post/40799636705/android-change-background-image-drawable-on-press

public static StateListDrawable makeStateDrawable(Drawable drawable, Drawable pressedDrawable, Drawable disabledDrawable) { 
    boolean set = false; 
    StateListDrawable stateDrawable = new StateListDrawable(); 
    if (disabledDrawable != null) { 
     set = true; 
     stateDrawable.addState(new int[] { -android.R.attr.state_enabled }, disabledDrawable); 
    } 
    if (pressedDrawable != null) { 
     set = true; 
     stateDrawable.addState(new int[] { android.R.attr.state_pressed }, pressedDrawable); 
    } 
    if (drawable != null) { 
     set = true; 
     stateDrawable.addState(new int[0], drawable); 
    } 
    return set ? stateDrawable : null; 
} 

别忘了创建字段“好玩”

试试这个改变image.When imageview的

Like_btn.setOnClickListener(new OnClickListener() 
     { 

      **private boolean fun = true;** 


      public void onClick(View v) 
      { 
       if(fun) 
       { 
       Like_btn.setImageResource(R.drawable.unlike); 
       fun=false; 
       } 
       else 
       { 
        fun=true;  
        Like_btn.setImageResource(R.drawable.like); 
        Toast.makeText(getApplicationContext(), "Changed", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 

试试下面的代码: -

boolean flag=false; 
ImageButton btn = (ImageButton)findViewById(R.id.btn); 

// when you click this demo button 
btn .setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
    if (!flag) { 
     btn.setBackgroundResource(R.drawable.imageonpress); 
     flag=true; 
    } 
    else { 
      btn.setBackgroundResource(R.drawable.image); 
      flag=false; 
    } 
    } 
} 

float alpha_first = 0.2f; 
float alpha_second = 1.0f; 
    AlphaAnimation alphadp = new AlphaAnimation(alpha_second, alpha_first); 
     switch (v.getId()) { 
     case R.id.disable_deactivate_pic: 
     ImageButton disable_button =(ImageButton)findViewById(R.id.disable_deactivate_pic); 
       if (!flag) { 
        disable_button.setImageResource(R.drawable.enable_active); 

        linearLayout_for_picture = (LinearLayout) findViewById(R.id.linearlayout_imageView_pic); 

       alphadp.setFillAfter(true); 
       linearLayout_for_picture.startAnimation(alphadp); 
       flag=true; 
       } 
     else { 
        disable_button.setImageResource(R.drawable.disable_active); 
        alphadp.setFillAfter(false); 
        linearLayout_for_picture.startAnimation(alphadp); 
        flag=false; 
       } 

      break; 

Demo_button.setImageResource(R.drawable.secondimage) 

//Demo_button is your event holder (the button or imageview or bitmap file which contains the image) and secondimage is your image (drawable) file, without any complications. 

该做的伎俩。

更好的解决方案使用下面的XML作为图像来源:

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android" > 
     <item android:state_activated="true"> 
      <bitmap android:src="@drawable/image_selected"/> 
     </item> 
     <item> 
      <bitmap android:src="@drawable/image_not_selected"/> 
     </item> 
    </selector> 

    @Override 
    public void onClick(View v) { 
     v.setActivated(!v.isActivated()); 
    } 
+0

另请参阅我的答案,它更短,不需要Java代码:https://stackoverflow.com/a/45239629/245966(和它也会在Android Studio中生成预览) – 2017-07-21 13:58:23

什么工作对我来说是:

我创建了一个新的可绘制的XML文件,例如,image_state。XML

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <bitmap android:src="@drawable/image_pressed"/> 
    </item> 
    <item> 
     <bitmap android:src="@drawable/image"/> 
    </item> 
</selector> 

而在我的布局文件,我设置的ImageView的src为:

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:src="@drawable/image_state"/> 

如果你有一个ImageViewImageButton并希望改变这种形象的按下时,你可以刷新活动对于任何压制:

fav.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      int isFavor = c.getInt(c.getColumnIndex("isFavor")); 
      if(isFavor == 1){ 
       db.execSQL("update content set isFavor=0 where ID="+idxx+";"); 
       fav.setImageResource(R.drawable.favnot_ic); 

       Toast.makeText(context.getApplicationContext(),"item cleaned",Toast.LENGTH_LONG).show(); 
       activity.finish(); 
       activity.overridePendingTransition(0, 0); 
       context.startActivity(activity.getIntent()); 
      } 
      else{ 
       db.execSQL("update content set isFavor=1 where ID=" + idxx + ";"); 
       fav.setImageResource(R.drawable.fav_ic); 
       Toast.makeText(context.getApplicationContext(),"Item added...",Toast.LENGTH_LONG).show(); 
       activity.finish(); 
       activity.overridePendingTransition(0, 0); 
       context.startActivity(activity.getIntent()); 
      } 
     } 
    }); 

这似乎是实现这一目标的最短途径,并且只需要XML,没有Java代码:

将文件保存为绘制/ image_pressable.xml旁边的两个图像:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/image_pressed" android:state_pressed="true" /> 
    <item android:drawable="@drawable/image_regular" /> 
</selector> 

然后引用它:

<ImageView android:src="@drawable/image_pressable" /> 

如果u在乌尔应用已经一个按钮,将做这两个图片之间的交换你有点击时,然后有一个简单的代码:D

//在Android中添加图片我们只是“从他们的位置复制他们d在过去(RES - >绘制) “

//然后拖放 ”ImageView的“,并选择ü要显示

// U可以调整刻度掷图像” scaleType,layout_Width & layout_Height “

public boolean swap = true; 

public void change(View view) 
{ 
    ImageView i = (ImageView) findViewById(R.id.img); 
    if (swap) 
    { 
     i.setImageResource(R.drawable.images); 
     swap=false; 
    } 
    else 
    { 
     swap=true; 
     i.setImageResource(R.drawable.couple); 
    } 

}