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異常彙集: http://blog.csdn.net/xiabing082/article/details/43487159