您的位置:首页 > 移动开发 > Android开发

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

2016-01-08 23:04 706 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: