我有一个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
}
});
答案 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作为图像视图的初始图像,这一点很重要,否则我们的图像在第一次单击时不会改变。