300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android自定义控件7--自定义开关--绘制界面内容

Android自定义控件7--自定义开关--绘制界面内容

时间:2021-09-06 21:39:43

相关推荐

Android自定义控件7--自定义开关--绘制界面内容

本文实现全自定义控件--自定义开关

本文地址:/wuyudong/p/5922316.html,转载请注明源地址。

自定义开关 (View),本文完成下面内容

1. 写个类继承View

2. 拷贝包含包名的全路径到xml中

3. 界面中找到该控件, 设置初始信息

4. 根据需求绘制界面内容

Android 的界面绘制流程:

测量----------> 摆放 -------->绘制

measure ----->layout ---->draw

| | |

onMeasure--->OnLayout-->onDraw

新建类ToggleView,继承自View

package com.wuyudong.toggleview.ui;import android.content.Context;import android.util.AttributeSet;import android.view.View;/*** 自定义开关* * @author wuyudong* */public class ToggleView extends View {/*** 用于代码创建控件* * @param context*/public ToggleView(Context context) {super(context);// TODO Auto-generated constructor stub }/*** 用于在xml里使用,可指定自定义属性* * @param context* @param attrs*/public ToggleView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub }/*** 用于在xml里使用,可指定自定义属性,如果指定了样式,则走此构造函数* * @param context* @param attrs* @param defStyle*/public ToggleView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub }/*** 设置背景图* * @param switchBackground*/public void setSwitchBackgroundResource(int switchBackground) {}/*** 设置滑块图片资源* * @param slideButton*/public void setSlideButtonResource(int slideButton) {}/*** 设置开关状态* * @param b*/public void setSwitchState(boolean b) {}}

布局如下:

<RelativeLayout xmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><com.wuyudong.toggleview.ui.ToggleViewandroid:id="@+id/toggleView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true" /></RelativeLayout>

接着将画布进行填充,设置开关状态

package com.wuyudong.toggleview.ui;import com.wuyudong.toggleview.R;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;/*** 自定义开关* * @author wuyudong* */public class ToggleView extends View {private Bitmap switchBackgroundBitmap;private Bitmap slideButtonBitmap;private boolean mSwitchState = false; //开关状态,默认关闭/*** 用于代码创建控件* * @param context*/public ToggleView(Context context) {super(context);// TODO Auto-generated constructor stub }/*** 用于在xml里使用,可指定自定义属性* * @param context* @param attrs*/public ToggleView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stub }/*** 用于在xml里使用,可指定自定义属性,如果指定了样式,则走此构造函数* * @param context* @param attrs* @param defStyle*/public ToggleView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(switchBackgroundBitmap.getWidth(),switchBackgroundBitmap.getHeight());}/** * Canvas: 画布,画板,在上面绘制的内容都会显示在界面上*/@Overrideprotected void onDraw(Canvas canvas) {//1、绘制背景Paint paint = new Paint();canvas.drawBitmap(switchBackgroundBitmap, 0, 0, paint);//2、绘制滑块//根据开关状态,直接设置图片位置if(mSwitchState) {int newLeft = switchBackgroundBitmap.getWidth() - slideButtonBitmap.getWidth();canvas.drawBitmap(slideButtonBitmap, newLeft, 0, paint);} else {canvas.drawBitmap(slideButtonBitmap, 0, 0, paint);}}/*** 设置背景图* * @param switchBackground*/public void setSwitchBackgroundResource(int switchBackground) {switchBackgroundBitmap = BitmapFactory.decodeResource(getResources(),switchBackground);}/*** 设置滑块图片资源* * @param slideButton*/public void setSlideButtonResource(int slideButton) {slideButtonBitmap = BitmapFactory.decodeResource(getResources(),slideButton);}/*** 设置开关状态* * @param b*/public void setSwitchState(boolean mSwitchState) {this.mSwitchState = mSwitchState;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。