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


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


本节前言

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

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

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


本节正文

1. 简介

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


2.使用步骤

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

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

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


3.案例讲解

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

Android自定义View----1. 自定义自绘控件_第1张图片.

定义一个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异常汇集: http://blog.csdn.net/xiabing082/article/details/43487159



你可能感兴趣的:(android,自定义,控件,自绘控件)