Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作

在Android绘图机制(一)——自定义View的基础属性和方法
里说过,实现自定义View有三种方式,分别是

1.对现有的控件进行扩展
2.通过组件来实现新的控件
3.重写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);    }}

截图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件_第1张图片

二.重写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);    }}

截图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件_第2张图片

这里,你会疑惑,为什么文字不是居中?我们来画个图

Android绘图机制(三)——自定义View的实现方式以及半弧圆新控件_第3张图片

这个还是比较基础的,下一节我们就来点新的玩法

Demo下载:本系列最后一节提供

更多相关文章

  1. Android群英传笔记——第六章:Android绘图机制与处理技巧
  2. 在Android中实现Hook机制的实验
  3. Android引入广播机制的用意。单线程模型Message、Handler、Messa
  4. 【Android休眠】之Android休眠机制
  5. android中异步消息的处理机制
  6. Android:通过ValueAnimator动画改变控件长宽失效的问题解决
  7. Android内存管理机制和内存泄漏分析及优化
  8. 【5年Android从零复盘系列之五】关于页面布局控件开发总结

随机推荐

  1. Android中一直走马灯效果的TextView
  2. APP启动时白屏或出现标题
  3. [Android] 如何取得版本号码
  4. android GridView 只显示一行,可以左右滑
  5. Android获得屏幕的宽和高
  6. android TelephonyManager
  7. android 收集
  8. 【Android】编译CM10遇到的错误解决方案
  9. 百度地图开发-申请ak及相关配置
  10. 《Android(安卓)安全(一)》AndroidManifest