Android自定义ImageView实现点击两张图片切换效果

Android自定义ImageView实现点击两张图片切换效果,第1张

概述笔者在做一个项目中遇到的一个小阻碍,于是就实现了这个ImageView达到开发需求

笔者在做一个项目中遇到的一个小阻碍,于是就实现了这个ImageVIEw达到开发需求

情景需求 > 点击实现图片的切换

可能有人会说了,这还不简单?为ImageVIEw设置点击事件,然后通过重写的onClick(VIEw v)方法判断定义的某一个flag进行图片的切换,伪代码如下:

private boolean flag;public voID onClick(VIEw v){ if(flag){  mImageVIEw.setimageResource(R.drawable.xx1);   }else{  mImageVIEw.setimageResource(R.drawable.xx2); } flag = !flag;}

笔者连上面的代码知道写出来那为什么还要去自定义一个ImageVIEw了?

具体需求:两个ImageVIEw之间实现单选效果

我们试想下,目前两个ImageVIEw通过上面的代码可能还好,只要在不同的事件中做出不同的判断就好了,但如果一但ImageVIEw增多了了?
A:你不知道用 RadioGroup+Radiobutton 啊!
B:是哦!我现在去试下。
……
B:不行啊,虽然Radiobutton可以实现,但不好做适配,我为Radiobutton设置Drawable,不能居中,而且不能随着Radiobutton的大小改变而改变,资源图片是多大就多大,显示区域不够就不能完全显示出来。
A:…?,额,是吗?这样啊!那我们就自定义一个ImageVIEw来实现吧!
B:为什么是自定义ImageVIEw?而不是自定义Radiobutton?
A:自定义Radiobutton实现ImageVIEw的src属性比较复杂(等着正在看这博客的大神实现),而自定义ImageVIEw来实现单选的属性比较好实现。
B:那怎么实现了?
A:看代码,代码如下:

attrs.xml <为自定义ImageVIEw添加两个属性>

<?xml version="1.0" enCoding="utf-8"?><resources><declare-styleable name="SelectorImageVIEw"> <attr name="selector_src" format="reference"/>//选中的src图片属性 <attr name="checked" format="boolean"/></declare-styleable></resources>

Class - SelectorImageVIEw<此类实现了Checkable接口,这里没什么特殊功能,而只是利用此接口中的方法而已,不实现我们也可以自己写>

public class SelectorImageVIEw extends ImageVIEw implements Checkable { private boolean isChecked; private Drawable mSelectorDrawable; private Drawable mDrawable; public SelectorImageVIEw(Context context) {  this(context,null); } public SelectorImageVIEw(Context context,AttributeSet attrs) {  this(context,attrs,0); } public SelectorImageVIEw(Context context,AttributeSet attrs,int defStyleAttr) {  super(context,defStyleAttr);  /**获取默认属性src的Drawable并用成员变量保存*/  mDrawable = getDrawable();  final TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.SelectorImageVIEw);  /**获取自定义属性selector_src的Drawable并用成员变量保存*/  Drawable d = a.getDrawable(R.styleable.SelectorImageVIEw_selector_src);  mSelectorDrawable = d;  /**获取自定义属性checked的值并用成员变量保存*/  isChecked = a.getBoolean(R.styleable.SelectorImageVIEw_checked,false);  setChecked(isChecked);  if (d != null && isChecked) {  /**如果在布局中设置了selector_src与checked = true,我们就要设置ImageVIEw的图片为mSelectorDrawable */   setimageDrawable(d);  }  a.recycle(); } @OverrIDe public voID setimageDrawable(Drawable drawable) {  super.setimageDrawable(drawable); } @OverrIDe public voID setChecked(boolean checked) {  this.isChecked = checked; } @OverrIDe public boolean isChecked() {  return isChecked; } @OverrIDe public voID toggle() { /**此处依据是否选中来设置不同的图片*/  if (isChecked()) {   setimageDrawable(mSelectorDrawable);  } else {   setimageDrawable(mDrawable);  } } public voID toggle(boolean checked){ /**外部通过调用此方法传入checked参数,然后把值传入给setChecked()方法改变当前的选中状态*/  setChecked(checked);  toggle(); }}

layout.xml

<linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:app="http://schemas.androID.com/apk/res-auto" androID:layout_wIDth="match_parent" androID:layout_height="match_parent"> <com.qjay.adf.Widget.SelectorImageVIEw  androID:ID="@+ID/iv"  androID:layout_wIDth="100dp"  androID:layout_height="100dp"  app:selector_src="@mipmap/checked"  androID:src="@mipmap/no_checked"/></linearLayout>

Activity Code

public class MainActivity extends Activity { private SelectorImageVIEw iv; @OverrIDe protected voID onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentVIEw(R.layout.activity_main);  iv = (SelectorImageVIEw) findVIEwByID(R.ID.iv);  iv.setonClickListener(new VIEw.OnClickListener() {   @OverrIDe   public voID onClick(VIEw v) {    iv.toggle(!iv.isChecked());   }  }); }}

实现效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android自定义ImageView实现点击两张图片切换效果全部内容,希望文章能够帮你解决Android自定义ImageView实现点击两张图片切换效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1143402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存