[android] 切换按钮-自定义控件

[android] 切换按钮-自定义控件,第1张

概述准备两张图片,按钮背景,上面的小开关 创建一个类MyToggleBtn,继承View 实现三个构造方法,传递上下文, 实现构造方法,传递Context对象,在java代码中实例化时主要使用这个 实现构

准备两张图片,按钮背景,上面的小开关

创建一个类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(),设置抗锯齿,参数:布尔值

 

 

滑动按钮

滑动按钮目前的位置,00,状态是 关

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] 切换按钮-自定义控件所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1121178.html

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

发表评论

登录后才能评论

评论列表(0条)

保存