Android中动态图形的绘制

Linux大全评论281 views阅读模式

开始学习了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中动态图形的绘制/

看下效果图:

  1. package com.jiangqq.csdn;  
  2.   
  3. /** 
  4.  * 自定义组件画组件 
  5.  */  
  6. import android.content.Context;  
  7. import android.graphics.Canvas;  
  8. import android.graphics.Color;  
  9. import android.graphics.Paint;  
  10. import android.view.MotionEvent;  
  11. import android.view.View;  
  12.   
  13. public class CanvasView extends View {  
  14.   
  15.     public int x = 0;  
  16.     public int y = 0;  
  17.     public int mIndex = 0;  
  18. //必须加入构造函数,也可以使用另外两个构造函数   
  19.     public CanvasView(Context context) {  
  20.         super(context);  
  21.         //下面两个设置聚焦和触摸模式,可以不设置,这里设置了,因为其他地方要加入这两个事件   
  22.         setFocusable(true);  
  23.         setFocusableInTouchMode(true);  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean onTouchEvent(MotionEvent event) {  
  28.         return false;  
  29.     }  
  30.   
  31.     @Override  
  32.     protected void onDraw(Canvas canvas) {  
  33.         super.onDraw(canvas);  
  34.         if (mIndex < 100) {  
  35.             mIndex++;  
  36.         } else {  
  37.             mIndex = 0;  
  38.         }  
  39.         Paint _Paint = new Paint();  
  40.         switch (mIndex % 4) {  
  41.         case 0:  
  42.             _Paint.setColor(Color.RED);  
  43.             break;  
  44.         case 1:  
  45.             _Paint.setColor(Color.BLUE);  
  46.             break;  
  47.         case 2:  
  48.             _Paint.setColor(Color.YELLOW);  
  49.             break;  
  50.   
  51.         case 3:  
  52.             _Paint.setColor(Color.LTGRAY);  
  53.             break;  
  54.         }  
  55.         canvas.drawRect(x, y, x + 100, y + 100, _Paint);  
  56.     }  
  57.   
  58. }  

企鹅博客
  • 本文由 发表于 2020年7月11日 04:36:17
  • 转载请务必保留本文链接:https://www.qieseo.com/174112.html

发表评论