【问题标题】:how to change the image on click of imagebutton?如何在单击图像按钮时更改图像?
【发布时间】:2015-08-27 09:27:15
【问题描述】:

我正在制作一个图像按钮。我需要在单击图像按钮时更改图像。实际上它会更改背景图像但只有几秒钟。为什么?

这是我的代码

 <ImageButton android:id="@+id/favorite"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:src="@drawable/start"
        android:background="#00ffffff"
        />

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

    <item android:drawable="@drawable/off" /> <!-- default -->
</selector>

点击图片按钮时需要在图片上显示..?我可以在java端写吗?我可以在图片按钮的点击监听器上写吗?

【问题讨论】:

  • 您已经定义了一个选择器,它正在更改android:state_pressed="true" 上的图像。这就是图像变化几秒钟的原因。是的,您可以更改按钮单击侦听器上的图像。让我知道要求或重新提出您的问题?
  • 我需要在单击图像时更改图像..当用户按下图像按钮时我需要改变..实际上图像会改变几秒钟。但我需要永久
  • 我想@Marta 已经帮您解决了。酷。
  • 但是直到现在她都没有给出答案
  • 检查她的答案。它会为你工作。

标签: android android-layout android-intent


【解决方案1】:

这就是为什么您使用选择器作为按钮背景并且图像会根据按钮的状态而变化。如果按下它,图像将处于“打开”状态,并且处于正常状态(未按下且未聚焦),图像将“关闭”。

编辑:

public class MainActivity extends AppCompatActivity {

ImageButton btn;
boolean isPressed;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn = (ImageButton) findViewById(R.id.btn);
    btn.setBackgroundResource(R.drawable.normal);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(isPressed){
                v.setBackgroundResource(R.drawable.normal);
            }else{
                v.setBackgroundResource(R.drawable.pressed);
            }
            isPressed = !isPressed; // reverse
        }
    });


}


  <ImageButton
    android:id="@+id/btn"
    android:text="@string/hello_world" android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

【讨论】:

  • tenis 但是当我点击图片时它只显示第二秒而不是永久显示
  • 我会解释更多,当我打开应用程序时,它会显示图像..当我点击它时,它会在图像上显示 1 秒钟,我需要在单击图像后永久显示在图像上
  • 因为 android:state_pressed="true" 在按下按钮时(当您用手指点击按钮时)设置可绘制(打开)。当您取消点击时,该按钮未被按下并且
  • 好吧,我给你举个例子
【解决方案2】:

实际上它改变了背景图像,但只改变了几秒钟。为什么?

我认为很明显,drawable中的那些项目是针对用户按下ImageButton或在正常模式下的状态。

我可以在java端写吗?我可以在图片按钮的点击监听器上写吗?

是的,再次是的 :D 如果您想在用户按下它时更改它,只需这样做:

XML 布局:

<ImageButton android:id="@+id/favorite" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/off" android:background="#00ffffff" />

Java 端(例如在你的 onCreate 方法中)

ImageButton favorite;
boolean isFav = false;
public void onCreate(Bundle savedInstanceState){
    ///...
    favorite = findViewById(R.id.favorite);
    favorite.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            isFav = !isFav;
            if (isFav){
                favorite.setImageResource(R.drawable.on);
            }
            else{
                favorite.setImageResource(R.drawable.off);
            }
        }
    });
    ///...
}

【讨论】:

    【解决方案3】:

    通过在图像的 onClickListener 中动态提供绝对路径或 Internet url 来更改图像的来源。

    image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Here before changing the image you can check if the appropriate                                    //image is set to the view.
                    image.setImageResource(R.drawable.on);
    
            }
    });
    

    也可以这样

    btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isPressed){
                    v.setBackgroundResource(R.drawable.normal);
                }else{
                    v.setBackgroundResource(R.drawable.pressed);
                }
                isPressed = !isPressed; // reverse
            }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-24
      • 2013-11-05
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多