【问题标题】:Change two images on button click (Android)单击按钮更改两个图像(Android)
【发布时间】:2014-11-23 08:22:18
【问题描述】:

所以,我想制作一个按钮,每次按下它时,它都会改变按钮上方的图像。我总共有 2 张图像,所以我不使用数组。假设我有 image1.png 和 image2.png。默认图像是image1,按下按钮后它会变成image2。如果我再次按下它,它会变成 image1。

package blablablabla;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

ImageView image;

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

    image = (ImageView) findViewById(R.id.myicon);
}


public void onClick(View view) {
    switch(view.getId()){
    case R.id.button1:{
        image.setImageResource(R.drawable.initial);
        return;
    }
  }
 }
}

我想过做一个if语句:如果图像是image1,则将其更改为image2,反之亦然。

问题:我换成image2后,无法切换回来。我知道我没有为此编写代码,因为我弄错了。

【问题讨论】:

    标签: android image onclick buttonclick


    【解决方案1】:

    好的,我认为这可能会:

    package blablablabla;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ImageView;
    
    public class MainActivity extends Activity {
    
    ImageView image;
    boolean flag = true;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        image = (ImageView) findViewById(R.id.myicon);
    }
    
    
    public void onClick(View view) {
        switch(view.getId()){
        case R.id.button1:{
        if(flag)
        {       
            image.setImageResource(R.drawable.initial);
            flag=false;
        }
        else
        {
            image.setImageResource(R.drawable.secondary);
            flag=true;
        }
            return;
        }
      }
     }
    }
    

    【讨论】:

    • 你好...假设我正在执行这一项活动。用户单击以发光图像...如果用户从一项活动转到另一项活动并再次返回活动一项,按钮会保持发光状态吗?
    • @Wini 我建议你试试这些东西,并考虑保存实例状态。
    【解决方案2】:

    好的,在您检索ImageViewonCreate() 中,您首先需要使用setTag(),以便您可以识别其中已经存在的图像。一旦设置了ImageView 的图像,您将无法取回它的资源 ID。这只是一个解决方法,所以,这样做:

    image = (ImageView) findViewById(R.id.image);
    image.setTag(R.drawable.image1);  
    

    现在,在您的onClick() 中,您可以执行以下操作:

    int tag = (int) image.getTag();
    if( tag == R.drawable.image1 ){
        image.setImageDrawable(getResources().getDrawable(R.drawable.image2));
        image.setTag(R.drawable.image2);
    }else{
        image.setImageDrawable(getResources().getDrawable(R.drawable.image1));
        image.setTag(R.drawable.image1);
    }  
    

    基于:https://stackoverflow.com/a/14474954/1894684

    您也可以使用 setImageResource() 代替 setImageDrawable()。前者在 UI 线程上进行图像解码,虽然

    【讨论】:

    • 嗯,我明白了。但是为什么你使用 set.ImageDrawable?我的意思是,你也可以使用 setImageResource ,对吗?编辑:哦,现在我看到了底部的文字!谢谢你的回答!!
    • 你好...假设我正在执行这一项活动。用户单击以发光图像...如果用户从一项活动转到另一项活动并再次返回活动一项,按钮会保持发光状态吗?
    猜你喜欢
    • 2020-04-30
    • 1970-01-01
    • 2017-01-21
    • 2015-05-09
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    相关资源
    最近更新 更多