歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中動態圖形的繪制

Android中動態圖形的繪制

日期:2017/3/1 10:30:50   编辑:Linux編程

開始學習了Android中的動態圖形的繪制,直接用個例子上手;

基本思路如下:

一:創建一個繼承與View類自定義類,本例是(CanvasView),必須要有構造方法(可以使用1: public View(Context context);2: public View(Context context, AttributeSet attrs);3:public View(Context context, AttributeSet attrs, int defStyle)的其中一個);

二:覆蓋其中的onDraw()方法;使用其中Canvas對象在界面上面繪制圖形;

三;然後我們可以通過postInvalidate()或者invalidate()方法來調用onDraw()方法來進行圖形的重繪.

【注:invalidate ()和postInvalidate()方法的選擇:文檔中已經寫的很清楚了,如果要使用invalidate()必須要在UI主線程當中,如果不在UI主線程中,就要去調用postInValidate()】

下面是我寫的一個例子:使用了兩種更新的方法1:Handler結合invalidate();2:直接使用postInvalidate()

實現的效果是:在屏幕上面畫一個矩形,然後開個線程,讓矩形每隔一秒改變顏色,並且矩形以x軸和y軸分別同時加+1想右下角移動.

Android中動態圖形的繪制源代碼下載地址:

免費下載地址在 http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在 /2012年資料/2月/19日/Android中動態圖形的繪制/

看下效果圖:

第一種方法代碼如下:【直接使用postInvalidate()】

  1. package com.jiangqq.csdn;
  2. /**
  3. * 自定義組件畫組件
  4. */
  5. import android.content.Context;
  6. import android.graphics.Canvas;
  7. import android.graphics.Color;
  8. import android.graphics.Paint;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11. public class CanvasView extends View {
  12. public int x = 0;
  13. public int y = 0;
  14. public int mIndex = 0;
  15. //必須加入構造函數,也可以使用另外兩個構造函數
  16. public CanvasView(Context context) {
  17. super(context);
  18. //下面兩個設置聚焦和觸摸模式,可以不設置,這裡設置了,因為其他地方要加入這兩個事件
  19. setFocusable(true);
  20. setFocusableInTouchMode(true);
  21. }
  22. @Override
  23. public boolean onTouchEvent(MotionEvent event) {
  24. return false;
  25. }
  26. @Override
  27. protected void onDraw(Canvas canvas) {
  28. super.onDraw(canvas);
  29. if (mIndex < 100) {
  30. mIndex++;
  31. } else {
  32. mIndex = 0;
  33. }
  34. Paint _Paint = new Paint();
  35. switch (mIndex % 4) {
  36. case 0:
  37. _Paint.setColor(Color.RED);
  38. break;
  39. case 1:
  40. _Paint.setColor(Color.BLUE);
  41. break;
  42. case 2:
  43. _Paint.setColor(Color.YELLOW);
  44. break;
  45. case 3:
  46. _Paint.setColor(Color.LTGRAY);
  47. break;
  48. }
  49. canvas.drawRect(x, y, x + 100, y + 100, _Paint);
  50. }
  51. }
Copyright © Linux教程網 All Rights Reserved