首先定义一个CustomView继承View,然后加入两个构造方法:
public CustomView(Context context) {
//此构造方法是为了在代码中实例化对象使用
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
//此方法是在布局文件中使用
super(context, attrs);
}
在添加完方法之后就算是一个简单的自定义View了,只不过这个自定义View除了拥有一些系统VIew自带的属性外什么都做不了!
今天我们主要说一下,onDraw(Canvas canvas)这个用来绘制View视图界面的方法!要想绘制图形,需要两个类,一个是Paint还有一个就是方法里面的那个Canvas,这个两个类一个相当于画笔一个相当于画布!下面是我代码写的一些实例代码,已经有很详细的注解了:
@Override
protected void onDraw(Canvas canvas) {
/**
* mPaint 画笔
*/
mPaint = new Paint();
mPaint.setTextSize(30);
mPaint.setColor(0xffff0000);
float size = mPaint.measureText(“自定义View”); //测量字符串的宽度
/**
* canvas 画布
* 绘制文字
* @NonNullString text, 要绘制的文字 “自定义View”
* int start, 所要绘制文字的开始下标
* int end, 所要绘制文字的结束下标
* float x, 绘制文字所在view的X坐标
* float y, 绘制文字所在view的Y坐标(以文字的基准线为准,就是说当Y坐标为0时,文字会超出View消失)!
* @NonNull Paint paint 画笔 (The paint used for the text (e.g. color, size, style))
*
*/
canvas.drawText("自定义View", 0, 30, mPaint);
canvas.drawText("自定义View", 0, 2, 0, 60, mPaint);
mPaint.setStyle(Paint.Style.STROKE); // 设置绘制图形为空心的
/**
* 绘制圆形
* float cx, 原点X坐标
* float cy, 原点Y坐标
* float radius, 半径
* @NonNull Paint paint
*/
canvas.drawCircle(10, 80, 10, mPaint);
/**
* 绘制图片
* @NonNull Bitmap bitmap,
* float left, X坐标
* float top, Y坐标
* @Nullable Paint paint
*/
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
canvas.drawBitmap(bitmap, 100, 100, mPaint);
/**
* float left, 矩形左侧相对view左侧的距离
* float right, 矩形右侧相对view左侧的距离
* float top, 矩形顶端相对view顶端的距离
* float bottom, 矩形底端相对view底端的距离
* 矩形的高 = bottom-top
* 矩形的宽 = right - left
* @NonNull Paint paint
*/
canvas.drawRect(100, 200, 300, 400, mPaint);
/**
* float startX,
* float startY,
* float stopX,
* float stopY,
@NonNull Paint paint
*/
canvas.drawLine(100, 450, 300, 500, mPaint);
}
canvas除了能绘制这些图形之外还能绘制很多的东西,有时间可以在自己尝试着去做绘制几种,使用的方法大致都相同,有不会的可以去百度或看看官方文档!
最后在XML布局资源中引用你这CustomView就可以了,或者直接在代码中实例化!
<com.example.a20161005.custormview.v1.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00ff00"
android:visibility="gone"
/>
本文介绍如何通过自定义View在Android应用中绘制文字、图片、圆形等元素,并提供了详细的代码示例。
2474

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



