如何知道ImageView上设置了哪个图像?

时间:2012-10-22 13:42:36

标签: android android-imageview

我有一个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 
} 
});

7 个答案:

答案 0 :(得分:2)

我认为最简洁的方法是跟踪与UI分离的状态,并让UI反映您感兴趣的状态。即,如果它是启用/禁用表示,请跟踪是否这是使用适当的setter方法在布尔值中启用的,并使用该方法更新UI。这也可能是StateListDrawable的良好应用。

答案 1 :(得分: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();
                }
            }
        });

答案 2 :(得分:0)

也许你可以考虑创建一个扩展CompoundButton的自己的视图。 检查状态是图像,非检查状态是另一个。

答案 3 :(得分:0)

将id设置为imageview,例如select.setId(imageArray [i])for ref see this link 并按照你想要的方式执行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
         }
    } } );

答案 4 :(得分:0)

您可以使用Integer并在更改图像时更改其值 例如,使用

public Integer num; 

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

if (num == 1) 

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

答案 5 :(得分:0)

您可以在imageview中使用tag并相应地检查图像。然后,当您更改图像时,再次为图像视图设置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;

            }

        }
    });

答案 6 :(得分: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中,我使用sky作为图像视图的初始图像,这一点很重要,否则我们的图像在第一次单击时不会改变。