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

Android自定义View----1. 自定义自绘控件

2015-12-04 16:43 405 查看
Android自定义View----1. 自定义自绘控件

本节前言

自定义View的实现方式大概可以分为三种:

(1).自绘控件 (2).组合控件 (3).继承控件

上一节讲了自定义组合控件,本节讲解自绘控件使用.

本节正文


1. 简介

自定义view中,自绘控件相对较难部分,自绘控件可以理解为,此组件需要我们自己来绘制完成的,绘制代码需要在onDraw方法中进行实现.


2.使用步骤

(1).先要理清自绘控件中各种图层如何嵌套的,有哪些基本图形绘制等,理清绘制思路.

(2).然后定义一个view继承自view 类,添加好类的构造方法,

(3).最后在onDraw方法中进行绘制操作.


3.案例讲解

如图所示,一个包含了圆形以及一个数字,看到此就要理解如何进行绘制顺序.


.

定义一个View类

public class CustomViews extends View {
private Paint paint;
private Rect rect;
private int count;
private int radius = 100;

public CustomViews(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
rect = new Rect();

new Thread(new Runnable() {

@Override
public void run() {
while (true) {
if (count >= 10) {
count = 0;
}
count++;

try {
Thread.sleep(1000);

} catch (InterruptedException e) {
e.printStackTrace();
}
postInvalidate();
}
}
}).start();
}

public CustomViews(Context context) {
super(context);
}

public CustomViews(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画一个圆形
paint.setColor(Color.YELLOW);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, radius, paint);

paint.setColor(Color.RED);
paint.setTextSize(50);
String counts = String.valueOf(count);
// 处理字体的宽高
paint.getTextBounds(count + "", 0, counts.length(), rect);
float textwidth = rect.width();
float textheight = rect.height();
canvas.drawText(count + "", (getWidth() - textwidth) / 2,
(getHeight() + textheight) / 2, paint);

}

}


主要绘制过程在 onDraw 方法中,先去绘制一个圆形,然后绘制一个文本,,绘制过程中注意的细节问题,需要自己去把握了。

代码就不做更多讲解,重要的地方,在于拆分绘制图形的顺序..如何进行绘制。


4.案例源码

http://git.oschina.net/xiabing/TestDemoForview


5.常见问题

自定义view 常见会出现问题,各种异常解决分析,请查阅:

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