记录我的第一个自定义的控件

来源:互联网 发布:兰州mac专柜 编辑:程序博客网 时间:2024/05/16 12:08
莫等闲,白了少年头,空悲切!今天开始真正的努力,不为别的,只为自己不留下---遗憾!这个第一个自己写的自定控件,基本功能实现了,有标注,欢迎大家提供宝贵意见!

package com.example.mbutton;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class myButton extends View {
//滑动部分
Bitmap slide_button;
//固定部分
Bitmap switch_background;
//画笔
Paint paint;
// 滑动部分滑动的距离
float slideLeft;
// 滑动标志
boolean isOpen = false;
//————————————————————————-
public myButton(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
// 创建初始化的工作
slide_button = BitmapFactory.decodeResource(getResources(),R.drawable.slide_button);
switch_background = BitmapFactory.decodeResource(getResources(),R.drawable.switch_background);
//初始化画笔
paint = new Paint();
paint.setColor(Color.GREEN);
// 设置抗锯齿,让边缘圆滑,一般都会设置
paint.setAntiAlias(true);
// 设置监听
this.setOnClickListener(new OnClickListener() {

        @Override        public void onClick(View arg0) {            // TODO Auto-generated method stub            isOpen = !isOpen;            if(isOpen){                //打开状态下,滑动距离为:背景图片宽度 / 2 - 15                slideLeft = switch_background.getWidth() / 2 - 15;                //强制重绘                invalidate();            }else{                //关闭状态下,滑动距离为:0                slideLeft = 0;                //强制重绘                invalidate();            }        }    });}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    //设置测量大小调用下面的方法    setMeasuredDimension(switch_background.getWidth(),switch_background.getHeight());}@Overrideprotected void onDraw(Canvas canvas) {    // 画固定部分    canvas.drawBitmap(switch_background, 0, 0, paint);    // 画移动部分    canvas.drawBitmap(slide_button, slideLeft, 0, paint);}

}

0 0