Android开发使用XML文件定义ImageView的在selected为true和false状态下显示不同的图像
2017-12-17 16:28
746 查看
最近想使用ImageView实现一个小功能,就是ImageView被点击之后显示另外一张图片,然后就想通过定义XML文件来实现不同的图片的切换,感觉这样更加节省内存,逻辑实现其实很简单,如下:
设置监听事件,当ImageView被点击时,在监听事件中设置ImageView的selected为true,然后在XML文件中定义ImageView的背景在普通状态和selected为true的状态下分别显示的的图片,如下:
就是在图片的selected为true是添加一个描边,很简单吧?我本来也是这样以为的,可是运行之后,点击ImageView,哎,怎么什么变化都没有,这是怎么回事?XML文件也没出现问题啊,怎么就不会变化呢?难道是ImageView的 setSelected()函数不是这样用的,然后我就去官网查了一下这个函数,对这个函数的说明如下:
Changes the selection state of this view. A view can be selected or not. Note that selection is not the same as focus. Views are typically selected in the context of an AdapterView like ListView or GridView; the selected view is the view that is highlighted.
看到这个说明我就在想难道这个只有在AdapterView 才会有效?实践是检验真理的唯一标准,试一下吧~然后我就用了一个ListView,在ListView中加载ImageView然后在调用它的setSelected()函数,当然结果如你所料,还是没有变化,这下我就懵了,这到底是怎么回事?
也想不用ImageView了,可是不甘心啊,要是遇到个问题就放弃一个控件,那。。。。。所以我决定还是继续试验,然后我又想会不会是XML文件定义的有问题,然后我就重新定义了一个XML文件,然后。。。真的管用了,新的XML文件如下:
既然是XML文件定义出错,然后我就开始找原来的文件错在哪里了,然后我找了半天也没找到,然后我就开始怀疑难道是编译器有Bug?不会吧?应该不会有这样简单的Bug吧?然后我就持着相信google的态度,一个单词一个单词的对照,然后。。。找到了,相信大家都早已经看出来了,第一个XML文件中把android:state_selected=”true”这个状态写在正常状态之后,就这一点不一样,其他都完全一样,问题就在这里,至于为什么,还是不明白,只是找到了解决办法,还希望各位知道的大神指点指点~
希望可以帮助遇到同样问题的你…….
PS:开发了一个制作个性二维码的应用,有兴趣的朋友可以试一试~ 创意二维码制作
mImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mImageView.setSelected(true); } });
设置监听事件,当ImageView被点击时,在监听事件中设置ImageView的selected为true,然后在XML文件中定义ImageView的背景在普通状态和selected为true的状态下分别显示的的图片,如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item > <shape android:shape="rectangle"> <solid android:color="#cf9393"/> <corners android:radius="10dp"/> </shape> </item> <item android:state_selected="true"> <shape android:shape="rectangle"> <stroke android:color="#51ed0e" android:width="1dp"/> <solid android:color="#cf9393"/> <corners android:radius="10dp"/> </shape> </item> </selector>
就是在图片的selected为true是添加一个描边,很简单吧?我本来也是这样以为的,可是运行之后,点击ImageView,哎,怎么什么变化都没有,这是怎么回事?XML文件也没出现问题啊,怎么就不会变化呢?难道是ImageView的 setSelected()函数不是这样用的,然后我就去官网查了一下这个函数,对这个函数的说明如下:
Changes the selection state of this view. A view can be selected or not. Note that selection is not the same as focus. Views are typically selected in the context of an AdapterView like ListView or GridView; the selected view is the view that is highlighted.
看到这个说明我就在想难道这个只有在AdapterView 才会有效?实践是检验真理的唯一标准,试一下吧~然后我就用了一个ListView,在ListView中加载ImageView然后在调用它的setSelected()函数,当然结果如你所料,还是没有变化,这下我就懵了,这到底是怎么回事?
也想不用ImageView了,可是不甘心啊,要是遇到个问题就放弃一个控件,那。。。。。所以我决定还是继续试验,然后我又想会不会是XML文件定义的有问题,然后我就重新定义了一个XML文件,然后。。。真的管用了,新的XML文件如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true"> <shape android:shape="rectangle"> <stroke android:color="#51ed0e" android:width="1dp"/> <solid android:color="#cf9393"/> <corners android:radius="10dp"/> </shape> </item> <item > <shape android:shape="rectangle"> <solid android:color="#cf9393"/> <corners android:radius="10dp"/> </shape> </item> </selector>
既然是XML文件定义出错,然后我就开始找原来的文件错在哪里了,然后我找了半天也没找到,然后我就开始怀疑难道是编译器有Bug?不会吧?应该不会有这样简单的Bug吧?然后我就持着相信google的态度,一个单词一个单词的对照,然后。。。找到了,相信大家都早已经看出来了,第一个XML文件中把android:state_selected=”true”这个状态写在正常状态之后,就这一点不一样,其他都完全一样,问题就在这里,至于为什么,还是不明白,只是找到了解决办法,还希望各位知道的大神指点指点~
希望可以帮助遇到同样问题的你…….
PS:开发了一个制作个性二维码的应用,有兴趣的朋友可以试一试~ 创意二维码制作
相关文章推荐
- ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等。 设置的方式包括: 1. 在layout xml中定义Android:s
- Android中同一个ImageView中根据状态显示不同图片
- Android中同一个ImageView中根据状态显示不同图片
- 同一个ImageView根据xml文件来显示不同的图片--level-list
- Android开发:同一ImageView显示不同图片
- 【Android 开发】:UI控件之显示图片控件 ImageView 的使用方法
- Android开发第三方库glide和圆形控件circleimageview一起使用第一次进入无法显示问题
- android-----使用ImageSpan对象在TextView组件中显示图像
- Android开发:同一ImageView显示不同图片
- Android手机开发:ImageView使用和从内存读取图片显示
- android 使用xml定义自己的View
- Android中自定义属性的使用------res/values文件下定义一个attrs.xml
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- Android下载文件显示到ImageView并保存在手机SD卡
- 【Android Training - Performance】提高显示布局文件的性能[Lesson 4 - 使用ViewHolder提升ListView的性能]
- 在Android使用XML文件控制按钮文字在各种状态下的颜色
- Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解
- Android开发:ImageView上绘制旋转圆环(透明度不同的旋转圆环,利用canvas.drawArc实现)
- Android开发:ImageView上绘制旋转圆环(透明度不同的旋转圆环,利用canvas.drawArc实现)
- Android开发进阶(五)--使用原始的XML文件