如何获取imageView中当前内容的相关信息并比较?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取imageView中当前内容的相关信息并比较?相关的知识,希望对你有一定的参考价值。

技术分享

技术分享
 1 public class MainActivity extends Activity implements OnClickListener{
 2 
 3     private Button button;
 4     private EditText editText;
 5     private ImageView imageView;
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10         button = (Button) findViewById(R.id.button);
11         button.setOnClickListener(this);
12         editText = (EditText) findViewById(R.id.edit_text);
13         imageView = (ImageView) findViewById(R.id.image_view);
14     }
15         
16     @Override
17     public void onClick(View v){
18         switch(v.getId()){
19         case R.id.button:
20             Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
21             if (/*How to decide the image?*/)
22                 imageView.setImageResource(R.drawable.wa2);
23             else imageView.setImageResource(R.drawable.ic_launcher);break;
24         }
25     }
View Code

目的:点击一下按钮,从一张图片切换到另一张

问题:如何知道此时imageView中是哪一张图片?

尝试:

1.

 if (imageView.getId()==R.drawable.ic_launcher) ...

无法切换

2.(idea from http://ask.csdn.net/questions/2010

if (((ImageView)v).getId() == R.drawable.ic_launcher)

程序炸掉了……

3.(idea from http://www.eoeandroid.com/thread-66050-1-1.html?_dsign=afedfe3c 3#)

if (imageView.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.ic_launcher).getConstantState()))

可用

原理:Drawable.ConstantState抽象类保存的是不同Drawable对象共享资源的信息,即图片信息而非不同的对象信息

技术分享

4.(idea from http://stackoverflow.com/questions/4526585/get-the-id-of-a-drawable-in-imageview

if (((Integer)((ImageView)v).getTag()).equals(R.drawable.ic_launcher))

又炸了……

查看Log:android.widget.Button cannot be cast to android.widget.ImageView

仔细读一下,发现原文是点击ImageView而非按钮……

修改代码如下

技术分享
 1     @Override
 2     public void onClick(View v){
 3         switch(v.getId()){
 4         case R.id.image_view:
 5             Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
 6             ImageView iv = (ImageView) v;
 7             Integer integer = iv.getId();
 8             integer = integer==null?0:integer;
 9             if (integer == R.drawable.wa2||integer == 0){
10                 imageView.setImageResource(R.drawable.wa2);
11                 imageView.setTag(R.drawable.wa2);
12             }
13             else {
14                 imageView.setImageResource(R.drawable.ic_launcher);
15                 imageView.setTag(R.drawable.ic_launcher);
16             }break;
17         }
18     }
wrong code

点击图片不再炸,但图片不变;交换if内容后变一次不再变

log出图片信息和ImageView信息如图,发现都不一样……

技术分享

然而发现接口就是这么定义的……一样就有鬼了

再仔细读一遍,其实代码核心就是getTag()和setTag()……前面全搞错了

最终修改代码如下:

        imageView.setOnClickListener(new OnClickListener(){
            public void onClick(View v){
                    Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
                    ImageView iv = (ImageView) v;
                    Integer integer = (Integer)iv.getTag();
                    integer = integer==null?0:integer;
                    Log.d("intval",integer.toString());
                    Log.d("wa2val",((Integer)R.drawable.wa2).toString());
                    Log.d("icval",((Integer)R.drawable.ic_launcher).toString());
                    if (integer == R.drawable.wa2){
                        iv.setImageResource(R.drawable.ic_launcher);
                        iv.setTag(R.drawable.ic_launcher);
                    }
                    else {
                        iv.setImageResource(R.drawable.wa2);
                        iv.setTag(R.drawable.wa2);
                    }
                }
        });
    }

点击按钮和图片均正常工作

总结:两种思路,都是获取不变量  1)获取图片本身的不变量:利用drawable.constantState  2)手动设置不变量:为imageView设置tag

以上是关于如何获取imageView中当前内容的相关信息并比较?的主要内容,如果未能解决你的问题,请参考以下文章

Android ImageView 获取图片信息后进行比较

Android开发,怎么在activity中获取fragment中的imageview

.Net Core中AuthorizationHandlerContext如何获取当前请求的相关信息

.Net Core中AuthorizationHandlerContext如何获取当前请求的相关信息

从 ImageView 获取图像

如何获取 iCarousel 当前可见视图?