2

我有一个 ImageView 可以有两个图像中的任何一个(比如图像 1 和图像 2,存储在 drawable 中)。如果 ImageView 包含 image1,我希望单击该 ImageView 以禁用,并且如果正在显示图像 2,则单击图像应更改为 image1 并在 ImageView 上禁用单击。
我无法找到知道 ImageView 上当前显示的图像的方法。

这是我的代码

ImageView select = (ImageView) view.findViewById(R.id.select); 
select.setOnClickListener(new OnClickListener() { 
public void onClick(View v) { 
// TODO Auto-generated method stub 
} 
});
4

7 回答 7

2

我认为最干净的方法是将这种状态与 UI 分开跟踪,并让 UI 反映您感兴趣的状态。即,如果它是启用/禁用表示,请跟踪是否启用在具有适当 setter 方法的布尔值中,并让该方法更新 UI。这也可能是StateListDrawable的一个很好的应用程序。

于 2012-10-22T13:47:34.713 回答
1

这是按钮:

final Button whichLane = (Button) reportDialog.findViewById(R.id.which_side_icon);
        // if button is clicked, close the custom dialog
        whichLane.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (whichLane.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.other_side).getConstantState()) ) {
                    Toast.makeText(HomeActivity.this, "text", 10).show();
                }
            }
        });
于 2013-07-10T14:13:42.737 回答
0

也许您可以考虑创建自己的 View 来扩展CompoundButton。检查状态将是图像,而未检查状态将是另一个。

于 2012-10-22T14:02:36.290 回答
0

将 id 设置为像这样的图像视图 select.setId(imageArray[i])以供参考查看此链接 并在其中执行您想要的 onclick 操作。

public static int[] imageArray = {
         R.drawable.image1,
         R.drawable.image2

         };
Bitmap bmp= BitmapFactory.decodeResource(getResources(),imageArray[i]);
    select.setImageBitmap(bmp);
    select.setId(imageArray[i]);
    select.setOnClickListener(new OnClickListener() {
     @Override
    public void onClick(View v) {
         if(v.getId()==R.drawable.image1){
                   //here you set image2 to select 
             } 
         else{
                  //here you set image1 to select
         }
    } } );
于 2014-06-23T05:12:52.860 回答
0

我遇到了同样的问题,我可以告诉你我做了什么。我发现这是最简单的

public class MainActivity extends AppCompatActivity {
ImageView iv;
Button btn;
int i = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    iv = findViewById(R.id.imageView);
    btn = findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(i==0)
            {
                iv.setImageResource(R.drawable.baloon); //baloon -> first image
                i=1;
            }
            else
            {
                i = 0;
                iv.setImageResource(R.drawable.sky); //sky -> second image
            }
        }
    });
}

}

注意:- 在 xml 中,我使用天空作为图像视图的初始图像,这很重要,否则我们的图像在第一次单击时不会改变。

于 2020-08-06T08:01:29.327 回答
0

您可以使用tagin imageview 并相应地检查图像。然后,当您更改图像时,再次设置tag图像视图。一个例子 :-

在这里,我展示了 8 张图片的示例。我首先设置p1了从布局文件命名的图像并将图像视图标签设置为1. 然后当用户点击图像时,我会检查imageview标签名称。并相应地更改图像。

   imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String tagId = imageView.getTag().toString();
            switch (tagId) {
                case "1":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p2));
                    imageView.setTag("2");
                    break;
                case "2":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p3));
                    imageView.setTag("3");
                    break;
                case "3":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p4));
                    imageView.setTag("4");
                    break;
                case "4":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p5));
                    imageView.setTag("5");
                    break;
                case "5":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p6));
                    imageView.setTag("6");
                    break;
                case "6":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p7));
                    imageView.setTag("7");
                    break;
                case "7":
                    imageView.setImageDrawable(getResources().getDrawable(R.drawable.p8));
                    imageView.setTag("8");
                    break;

            }

        }
    });
于 2017-03-08T04:55:16.940 回答
0

Integer 当您更改图像时,您可以使用并更改它的值。
例如使用一个

public Integer num; 

当您在视图上设置 image1 时,将 num 的值更改为 1。并在onClickListener方法中检查 num 是否为 1。IE

if (num == 1) 

更改为图像 2 否则更改为图像 1

于 2016-07-08T09:41:59.100 回答