您的位置:首页 > 移动开发 > Android开发

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

2016-09-30 15:20 399 查看
本文实现全自定义控件--自定义开关

本文地址:http://www.cnblogs.com/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="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<com.wuyudong.toggleview.ui.ToggleView
android: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);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(switchBackgroundBitmap.getWidth(),
switchBackgroundBitmap.getHeight());
}

/**
* Canvas: 画布,画板,在上面绘制的内容都会显示在界面上
*/
@Override
protected 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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐