Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件
2016-01-08 23:04
706 查看
Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作
所以本节就来带大家把这个流程走一遍,我们用到的项目还是
Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
本节现在就是做一个真正意义上的自定义View的操作了
注意本节的项目来自于《Android群英传》中的几个小例子
一.对现有的控件进行扩展之自定义TextView
我们新建一个Class类TextView继承TextView
package com.lgl.view.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; /** * Created by LGL on 2016/1/10. */ public class TextView extends android.widget.TextView { private Paint paint1, paint2; public TextView(Context context) { super(context); } public TextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { //实例化画笔 paint1 = new Paint(); //给画笔1设置颜色 paint1.setColor(getResources() .getColor(android.R.color.holo_blue_light)); //给画笔1设置Style paint1.setStyle(Paint.Style.FILL); //实例化画笔 paint2 = new Paint(); //给画笔2设置颜色 paint2.setColor(Color.YELLOW); //给画笔2设置Style paint2.setStyle(Paint.Style.FILL); //绘制外层矩形 canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint1); //绘制内层矩形 canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2); canvas.save(); //父类完成的方法,即绘制完成 super.onDraw(canvas); } }
截图
二.重写View来实现全新的控件
市面上有许许多多的APP,他们之中有很多的控件都不是原生的,而是需要我们自定义View的
package com.lgl.view.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet; import android.view.View; import android.view.WindowManager; /** * 半弧圆 * Created by LGL on 2016/1/10. */ public class RCircleView extends View { //弧的画笔 private Paint rpaint; //圆的画笔 private Paint cpaint; //文字的画笔 private Paint tvpaint; //屏幕高宽 private int width, height; //文字 private String text = "绘制半弧圆"; public RCircleView(Context context) { super(context); init(); } public RCircleView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { //获取屏幕的宽高 //Android绘图机制(一)——自定义View的基础属性和方法里面有讲 WindowManager wm = (WindowManager) getContext() .getSystemService(Context.WINDOW_SERVICE); width = wm.getDefaultDisplay().getWidth(); height = wm.getDefaultDisplay().getHeight(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //实例化画笔,以及设置属性,颜色,文字大小 rpaint = new Paint(); rpaint.setStyle(Paint.Style.STROKE); cpaint = new Paint(); tvpaint = new Paint(); tvpaint.setColor(Color.WHITE); tvpaint.setTextSize(20); //绘制弧线的区域矩形 RectF mArcRectF = new RectF((float) (width * 0.1), (float) (width * 0.1), (float) (width * 0.9), (float) (width * 0.9)); //绘制圆 canvas.drawCircle(width / 2, width / 2, (float) (width * 0.5 / 3), cpaint); //绘制弧线 canvas.drawArc(mArcRectF, 270, 240, false, rpaint); //这样绘制的话,会出现偏差的,文字以圆形的中心开始绘制 canvas.drawText(text, width / 2, width / 2, tvpaint); } }
截图
这里,你会疑惑,为什么文字不是居中?我们来画个图
这个还是比较基础的,下一节我们就来点新的玩法
Demo下载:本系列最后一节提供
相关文章推荐
- Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作
- 【Android】利用ArrayAdapter/SimpleAdapter创建ListView
- android开发之给LinearLayout增加点击效果
- (六)Android中Service通信
- 如何分析Android的Log
- Android设置监听回调的方式
- Android项目里,strings文件中字符串的格式化用法
- [Android]构建boot.img(三):boot.img的生成与结构
- [Android]构建boot.img(一):root目录与ramdisk.img的生成
- android132 360 05 手机定位
- android studio单元测试
- 【Android Studio】常用快捷键
- Android图片处理
- 【Android Studio】Gradle DSL method not found:'android()'
- Android SearchView设置与用法的那点事儿
- Android 的生命周期知识点问答
- 让多个fragment切换时不被实例化 android
- android 返回键的捕获
- Android Studio日志工具的使用
- 我在Ubuntu上安装Android Studio的全过程