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

简介: <div class="markdown_views"><h1 id="android绘图机制三自定义view的三种实现方式以及实战项目操作">Android绘图机制(三)——自定义View的三种实现方式以及实战项目操作</h1><hr><blockquote> <p>在<a href="http://blog.csdn.net/qq_26787115/articl

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);
    }
}

截图

这里写图片描述

二.重写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下载:本系列最后一节提供

目录
相关文章
|
20天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
50 1
|
3月前
|
Android开发 容器
Android UI设计: 什么是View和ViewGroup?
Android UI设计: 什么是View和ViewGroup?
36 0
|
14天前
|
XML Java Android开发
Android之UI基础控件
Android之UI基础控件
|
24天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
1月前
|
Android开发
[Android]RadioButton控件
[Android]RadioButton控件
12 0
|
3月前
|
Android开发
分享88个Android控件源代码总有一个是你想要的
分享88个Android控件源代码总有一个是你想要的
23 0
|
3月前
|
Android开发
分享89个Android控件源代码总有一个是你想要的
分享89个Android控件源代码总有一个是你想要的
71 0
|
4月前
|
XML API Android开发
Android 自定义View 之 Dialog弹窗
Android 自定义View 之 Dialog弹窗
|
4月前
|
XML API Android开发
Android 自定义View 之 饼状进度条
Android 自定义View 之 饼状进度条
|
4月前
|
XML API Android开发
Android 自定义View 之 简易输入框
Android 自定义View 之 简易输入框