准备两张图片,按钮背景,上面的小开关
创建一个类MyToggleBtn,继承VIEw
实现三个构造方法,传递上下文,
实现构造方法,传递Context对象,在java代码中实例化时主要使用这个
实现构造方法,传递Context对象,AttributeSet对象,在布局文件中主要使用
VIEw对象显示在屏幕上,有几个重要步骤
1.构造方法创建对象
2.测量vIEw的大小 onSeasure(int,int)
3.确定vIEw的位置,vIEw自身有一些建议权,决定权在父vIEw手中 onLayout()
4.绘制vIEw的内容 onDraw(Canvas)
构造方法,初始化vIEw,
调用BitmapFactory.decodeResurce()方法,把图片资源转成Bitmap对象,参数:Resource对象(getResources()),资源ID
重写onMesaure()方法,
不要调用父类
调用setMeasuredDimension()方法,参数:宽度,高度;调用背景Bitmap对象的getWIDth()和getHeight()
重写onDraw()方法,传递进来Canvas对象
调用Canvas对象的drawBitmap()方法,参数:Bitmap对象,左边点(0),上边点(0),Paint对象
获取Paint对象,new出来
调用Paint对象的setAntiAlias(),设置抗锯齿,参数:布尔值
滑动按钮
滑动按钮目前的位置,0,0,状态是 关
canvas.drawBitmap(bitmapBtn,paint);
滑动按钮的位置在,背景图的宽度-滑动按钮的宽度,0,状态是 开
canvas.drawBitmap(bitmapBtn,背景图的宽度-滑动按钮的宽度,paint);
定义成员变量currentState存储当前状态,值:布尔值
调用setonClickListener()方法,设置点击事件,参数:this
当前类实现obClickListener接口,实现onClick()方法
切换当前状态currentState=!currentState
判断当前状态
如果为真,滑动按钮的左边是背景图的宽度-滑动按钮的宽度
如果为假,滑动按钮的左边是0
调用invalIDate()方法,刷新当前视图
MyToggleBtn.java
package com.tsh.myswitchbtn;import androID.content.Context; androID.graphics.Bitmap; androID.graphics.BitmapFactory; androID.graphics.Canvas; androID.graphics.Paint; androID.util.AttributeSet; androID.vIEw.VIEw; androID.vIEw.VIEw.OnClickListener;public class MyToggleBtn extends VIEw implements OnClickListener { //背景图片 private Bitmap bitmapBackground; 按钮图片 Bitmap bitmapBtn; Paint paint; /** * 布局文件中使用 * @param context * attrs */ public MyToggleBtn(Context context,AttributeSet attrs) { super(context,attrs); initVIEw(); } * 初始化vIEw private voID initVIEw() { bitmapBackground=BitmapFactory.decodeResource(getResources(),R.drawable.switch_background); bitmapBtn=new Paint(); paint.setAntiAlias(true); 点击事件 setonClickListener(this); } * 计算大小 */ @OverrIDe protected voID onMeasure(int wIDthMeasureSpec,int heightmeasureSpec) { setMeasuredDimension(bitmapBackground.getWIDth(),bitmapBackground.getHeight()); } 当前状态 boolean currentState=false; 滑动按钮的当前left float slIDeBtnleft=0 * 绘制vIEw onDraw(Canvas canvas) { 绘制背景 canvas.drawBitmap(bitmapBackground,0,paint); 绘制滑动按钮 canvas.drawBitmap(bitmapBtn,slIDeBtnleft,paint); } * 点击事件 onClick(VIEw v) { currentState=!currentState; if(currentState==){ slIDeBtnleft=bitmapBackground.getWIDth()-bitmapBtn.getWIDth(); }else{ slIDeBtnleft=0; } invalIDate(); }}
布局:
<relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height tools:context="${relativePackage}.${activityClass}" > com.tsh.myswitchbtn.MyToggleBtn androID:layout_centerInParent="true" androID:ID="@+ID/my_toggle_btn" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" /></relativeLayout>
总结
以上是内存溢出为你收集整理的[android] 切换按钮-自定义控件全部内容,希望文章能够帮你解决[android] 切换按钮-自定义控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)