如何获取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 ...
随机推荐
- git 学习笔记1--config & help
1. config 配置用户名和邮箱: git config --global user.name 'pzdn2009' git config --global user.email 10502441 ...
- iOS之09-特有语法
1.分类 - Category 1> 基本用途 分类:可以给某个类扩充一些方法(不修改原来的代码) 如何在不改变原来类模型的前提下,给类扩充一些方法? 有2种方式: 继承: 分类(Categot ...
- yarn map failed
Container launch failed for container_1385017085286_4943_01_000053 : org.apache.hadoop.yarn.exceptio ...
- Extjs 属性控件[转载]
Ext.form.TimeField: 配置项: maxValue:列表中允许的最大时间 maxText:当时间大于最大值时的错误提示信息 ...
- Windows 8 Tips
Precisely this article is about Windows 8.1, the title uses Windows 8 due to the fact that Windows 8 ...
- Android ListView item项 显示动画
(1)使用LayoutAnimation 所谓的布局动画,其实就是为ViewGroup添加显示动画效果,主要用过LayoutAnimationController来控制实现.LayoutAnimati ...
- Codeforces Round #246 (Div. 2) B. Football Kit
题目的意思是求出每个队穿主场衣服和客场衣服的次数 每个队作为主场的次数是n-1,作为客场的次数是n-1 当每个队打主场的时候肯定穿的主场衣服 当每个队打客场时,如果客场与主场的衣服不同,则穿客场衣服 ...
- ACM: POJ 1061 青蛙的约会 -数论专题-扩展欧几里德
POJ 1061 青蛙的约会 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%lld & %llu Descr ...
- 《深入浅出Windows 10通用应用开发》
<深入浅出Windows 10通用应用开发>采用Windows 10的SDK进行重新改版,整合了<深入浅出Windows Phone 8.1应用开发>和<深入解析 ...
- 【BZOJ】3834: [Poi2014]Solar Panels
http://www.lydsy.com/JudgeOnline/problem.php?id=3834 题意:求$max\{(i,j)\}, smin<=i<=smax, wmin< ...