首先 先有一个类,这里博主写的是自定义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;
}
}
522

被折叠的 条评论
为什么被折叠?



