天天看點

Android自定義View----1. 自定義自繪控件

Android自定義View----1. 自定義自繪控件

本節前言

自定義View的實作方式大概可以分為三種:

(1).自繪控件   (2).組合控件   (3).繼承控件

上一節講了自定義組合控件,本節講解自繪控件使用.

本節正文

1. 簡介

自定義view中,自繪控件相對較難部分,自繪控件可以了解為,此元件需要我們自己來繪制完成的,繪制代碼需要在onDraw方法中進行實作.   

2.使用步驟

  (1).先要理清自繪控件中各種圖層如何嵌套的,有哪些基本圖形繪制等,理清繪制思路.

  (2).然後定義一個view繼承自view 類,添加好類的構造方法, 

  (3).最後在onDraw方法中進行繪制操作.

3.案例講解

 如圖所示,一個包含了圓形以及一個數字,看到此就要了解如何進行繪制順序.

Android自定義View----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