Android自定义UI

首先 先有一个类,这里博主写的是自定义Button,可以继承Button也可以继承View,因为View是所有控件的父类。这个类要重写View的四个方法。有一个onDraw的方法。这个方法有个canvas的属性。这个属性我们可以称之为画布。

写好路径,画笔,你想要画的图案。代码如下 —— >>

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;

public class MyButtonActivity extends View {

    private Bitmap bitmap;

    public MyButtonActivity(Context context) {
        super(context);
    }

    public MyButtonActivity(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        bitmap = Bitmap.createBitmap(600,600,Bitmap.Config.ARGB_8888);
    }

    public MyButtonActivity(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyButtonActivity(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }


    /**
     * @param canvas 画布
     *         Paint 画笔
     */
    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawColor(Color.RED);


        Path path=new Path();
        //从哪开始
        path.moveTo(100,100);
        path.lineTo(300,100);
        path.lineTo(150,300);
        path.lineTo(200,50);
        path.lineTo(250,300);
        path.lineTo(100,100);

        //实例化一个画笔
        Paint paint=new Paint();
        paint.setColor(Color.GRAY);
        //设置图案空心
        paint.setStyle(Paint.Style.STROKE);
        //设置画笔粗细
        paint.setStrokeWidth(5);

        //画路径
        canvas.drawPath(path,paint);

        //设置画笔粗细
        paint.setStrokeWidth(2);
        paint.setColor(Color.BLUE);
        //设置字体大小
        paint.setTextSize(15);
        canvas.drawText("嘻嘻",150,150,paint);
        super.onDraw(canvas);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.i("test","Touch —— >> 回调");
        return false;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    private int getMeasuredSize(int widthMeasureSpac,boolean b){
        //模式
        int sapcMode=MeasureSpec.getMode(widthMeasureSpac);
        //尺寸
        int spacSize=MeasureSpec.getSize(widthMeasureSpac);
        //计算所得的实际尺寸,要被返回
        int retSize=0;
        //得到两侧的留边
        int padding=(b?getPaddingLeft()+getPaddingRight():getPaddingTop()+getPaddingBottom());
        //对不同模式进行判断
        if(sapcMode==MeasureSpec.EXACTLY){
            retSize=spacSize;
        }else{
            retSize=(b?bitmap.getWidth()+padding:bitmap.getHeight()+padding);
        }
        if(sapcMode==MeasureSpec.UNSPECIFIED){
            retSize=Math.min(retSize,spacSize);
        }
        return retSize;
    }
}
最后去布局里使用就可以咯

 
  


你可能感兴趣的:(Android自定义UI)