当前位置:操作系统 > 安卓/Android >>

Android中动态图形的绘制(一)

今天开始学习了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想右下角移动.

       看下效果图:

 \\\


 

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


[java] <span style="font-size:16px;">package com.jiangqq.csdn; 
 
/**
 * 自定义组件画组件
 */ 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.MotionEvent; 
import android.view.View; 
 
public class CanvasView extends View { 
 
    public int x = 0; 
    public int y = 0; 
    public int mIndex = 0; 
//必须加入构造函数,也可以使用另外两个构造函数  
    public CanvasView(Context context) { 
        super(context); 
        //下面两个设置聚焦和触摸模式,可以不设置,这里设置了,因为其他地方要加入这两个事件  
        setFocusable(true); 
        setFocusableInTouchMode(true); 
    } 
 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
        return false; 
    } 
 
    @Override 
    protected void onDraw(Canvas canvas) { 
        super.onDraw(canvas); 
        if (mIndex < 100) { 
            mIndex++; 
        } else { 
            mIndex = 0; 
        } 
        Paint _Paint = new Paint(); 
        switch (mIndex % 4) { 
        case 0: 
            _Paint.setColor(Color.RED); 
            break; 
        case 1: 
            _Paint.setColor(Color.BLUE); 
            break; 
        case 2: 
            _Paint.setColor(Color.YELLOW); 
            break; 
 
        case 3: 
            _Paint.setColor(Color.LTGRAY); 
            break; 
        } 
        canvas.drawRect(x, y, x + 100, y + 100, _Paint); 
    } 
 

</span> 
<span style="font-size:16px;">package com.jiangqq.csdn;

/**
 * 自定义组件画组件
 */
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;

public class CanvasView extends View {

 public int x = 0;
 public int y = 0;
 public int mIndex = 0;
//必须加入构造函数,也可以使用另外两个构造函数
 public CanvasView(Context context) {
  super(context);
  //下面两个设置聚焦和触摸模式,可以不设置,这里设置了,因为其他地方要加入这两个事件
  setFocusable(true);
  setFocusableInTouchMode(true);
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  return false;
 }

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  if (mIndex < 100) {
   mIndex++;
  } else {
   mIndex = 0;
  }
  Paint _Paint = new Paint();
  switch (mIndex % 4) {
  case 0:
   _Paint.setColor(Color.RED);
   break;
  case 1:
   _Paint.setColor(Color.BLUE);
   break;
  case 2:
   _Paint.setColor(Color.YELLOW);
   break;

  case 3:
   _Paint.setColor(Color.LTGRAY);
   break;
  }
  canvas.drawRect(x, y, x + 100, y + 100, _Paint);
 }

}
</span>   主Activity类如下:[java] <span style="font-size:16px;">    private CanvasView _CanvasView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        _CanvasView = new CanvasView(this); 
        setContentView(_CanvasView); 
        new Thread(new MyGameCanvas()).start(); 
    } 
 
    class MyGameCanvas implements Runnable { 
 
        @Override 
        public void run() { 
            while (!Thread.currentThread().isInterrupted()) { 
                try { 
   

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,