1.写一个类继承自View,添加构造方法,重写onDraw方法,所有的绘制过程都是在这个方法中执行,canvas就是画布。
public class MyView extends View{
public MySurfaceView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
/**
*所有绘画代码都写在这里,canvas相当于画布
*/
super.onDraw(canvas);
}
}
2.有画布了还要有画笔才能开始画画,所以先制作画笔:
Paint paint = new Paint();
//设置画笔属性,更多设置看API文档
paint.setColor(Color.BLUE);
paint.setTextSize(18);
3.用画笔绘画:
//画文字,xy是坐标
canvas.drawText("hello Android", x, y, paint);
//画矩形前四个属性对应四条边坐标
canvas.drawRect(left, top, right, bottom, paint);
//画图片
canvas.drawBitmap(bitmap, x, y, paint);
/**在IO流中有关于bitmap图片的操作*/
4.用户操作的事件处理:
//重写触屏事件,至于获取坐标参照基础部分的触摸事件
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
//重写键盘事件,至于获取键码参照基础部分重写各种键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//此方法告诉画布重新绘制
invalidate();
return super.onKeyDown(keyCode, event);
}
这些事件处理是写在类体中,要想动态绘制内容绘图时哪些坐标就不能直接写了,要定义成全局变量,然后改变坐标后可以调用invalidate方法来重新绘制。
5.以上这些都是在画布上画,要显示在屏幕上写一个界面Activity,加载布局的那个方法这样写:
setContentView(new MyView(this));
也可以直接写在xml中:
<com.dulangDemo.jichu.MyView
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
这就是传说中的自定义控件,自己快去动手试试吧,第一次发博客,不喜勿喷
自己学习自定义view的一些总结
最新推荐文章于 2021-07-05 11:16:25 发布