点击按钮后更改两张图像(Android)

3

我想制作一个按钮,每次按下它时,它都会更改按钮上方的图像。我总共有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后,我无法切换回来。我知道我没有编写代码来实现这一点,因为我做错了。

2个回答

5

好的,我认为这可能可以:

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
@Wini 我建议你尝试这些方法,并且研究保存实例状态的相关知识。 - Sarthak Mittal

1

好的,在您的onCreate()中,当您检索您的ImageView时,您首先需要使用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://dev59.com/iW855IYBdhLWcg3wHweH#14474954

你也可以使用setImageResource()代替setImageDrawable()。不过前者将在UI线程上进行图像解码。


嗯,我明白了。但是为什么你使用set.ImageDrawable呢?我的意思是,你也可以使用setImageResource,对吧?编辑:哦,现在我看到底部的文本了!感谢你的回答!! - Cata
你好...假设我正在执行这个活动。用户点击发光图像...如果用户从一个活动转到另一个活动,再次回到活动一,按钮会保持发光吗? - Wini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接