如何获取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 }
目的:点击一下按钮,从一张图片切换到另一张
问题:如何知道此时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 }
点击图片不再炸,但图片不变;交换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开发,怎么在activity中获取fragment中的imageview
.Net Core中AuthorizationHandlerContext如何获取当前请求的相关信息