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

public class MainActivity extends Activity implements OnClickListener{
private Button button;
private EditText editText;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
editText = (EditText) findViewById(R.id.edit_text);
imageView = (ImageView) findViewById(R.id.image_view);
}
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
if (/*How to decide the image?*/)
imageView.setImageResource(R.drawable.wa2);
else imageView.setImageResource(R.drawable.ic_launcher);break;
}
}
目的:点击一下按钮,从一张图片切换到另一张
问题:如何知道此时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而非按钮……
修改代码如下
@Override
public void onClick(View v){
switch(v.getId()){
case R.id.image_view:
Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
ImageView iv = (ImageView) v;
Integer integer = iv.getId();
integer = integer==null?0:integer;
if (integer == R.drawable.wa2||integer == 0){
imageView.setImageResource(R.drawable.wa2);
imageView.setTag(R.drawable.wa2);
}
else {
imageView.setImageResource(R.drawable.ic_launcher);
imageView.setTag(R.drawable.ic_launcher);
}break;
}
}
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中当前内容的相关信息并比较?的更多相关文章
- 使用Java或 JavaScript获取 方括号中的内容
1.使用Java获取方括号中的内容 String str = "[你]们,[我]们,[他]们,都要[好好学习,天天敲代码]"; Pattern p = Pattern.compil ...
- MSSQL·查询数据库中所有索引的相关信息
阅文时长 | 0.45分钟 字数统计 | 784字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询数据库中所有索引的相关信息』 编写人 | SCscHero 编写时间 ...
- iPhone开发--正则表达式获取字符串中的内容
缘起: 想获取字符串中指定的字符,考虑用正则表达式,遂写了如下的代码: NSString *htmlStr = @"oauth_token=1a1de4ed4fca40599c5e5cfe0 ...
- 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)
众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下: PackageManager packageManager = this.getPackageMana ...
- kettle 利用 HTTP Client 获取猫眼电影API近期上映相关信息,并解析json
前言 Kettle 除了常规的数据处理之外,还可以模拟发送HTTP client/post ,REST client. 实验背景 这周二老师布置了一项实验: 建立一个转换,实现一个猫眼API热映电影的 ...
- 获取html 中的内容 将前台的数据获取到后台
使用js创建一个form表单 ,使用post上传到后台中 下面是代码.在获取html内容的时候使用了js节点来获取内容. parent:父节点.上一级的节点 siblings:兄弟节点.同一级别的节点 ...
- 获取html 中的内容 将前台的数据获取到后台 用 jquery 生成一个 form表单 提交数据
使用js创建一个form表单 ,使用post上传到后台中 下面是代码.在获取html内容的时候使用了js节点来获取内容. parent:父节点.上一级的节点 siblings:兄弟节点.同一级别的节点 ...
- json通过后台获取数据库中的内容,并在前端进行显示
fastjson.jar以及Echarts树图的js文件(需要在servlet对json进行赋值,所以需要用到json的插件) 链接:https://pan.baidu.com/s/1GBbamPNG ...
- yii框架通过http协议获取地址栏中的内容
//创建一个控制器 <?php namespace frontend\controllers; use frontend\models\Zhuce; use Yii; use yii\web\C ...
随机推荐
- excel VLOOKUP函数的使用方法 .
VLOOKUP函数是Excel中几个最重函数之一,为了方便大家学习,兰色幻想特针对VLOOKUP函数的使用和扩展应用,进行一次全面综合的说明.本文为入门部分 一.入门级 VLOOKUP是一个查找函数, ...
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
全程演示android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本 一 相关下载 (1) java JDK下载: 进入该网页: http://java.sun.com/java ...
- SolrCloud-4.10.2源代码启动流程梳理
SolrCloud-4.10.2源代码 web.xml中filter配置 SolrDispatchFilter <filter-name>SolrRequestFilter</fil ...
- PE-2 & 暴模...
题意: 求不大于4000000的斐波那契数列中,所有偶数之和. SOL: 还是只会暴模...看讨论区貌似有一个很牛逼的大神的发言? 英语水平太差... mark以下 The Fibonacci seq ...
- 原生js添加和删除类
原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...
- [深入浅出WP8.1(Runtime)]应用实例——移动截图
10.2应用实例——移动截图 移动截图例子是实现一个把一张图片的某个部分截取出来的功能,并且用户可以选定截取的图片区间.那个该例子会使用ManipulationDelta事件来实现对截取区间的选择.然 ...
- HDU 2824 简单欧拉函数
1.HDU 2824 The Euler function 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2824 3.总结:欧拉函数 题意:求(a ...
- (转)教你实现Winform窗体的四边阴影效果
1.首先我们得有这样一张阴影图片. 2.然后分别有两个窗体去实现这个阴影效果. SkinForm - 用于实现阴影的绘制,特性:鼠标可穿透,无法点击,跟随窗体. SkinMain - 主窗体,也是承载 ...
- How parse REST service JSON response
1. get JSON responses and go to : http://json2csharp.com/ 2. write data contracts using C# All class ...
- signal(SIGPIPE, SIG_IGN)
文章来源:http://blog.163.com/niuxiangshan@126/blog/static/170596595201221942952676/ 当服务器close一个连接时,若cl ...