Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android游戲開發---View線程繪動畫與顯示總結

Android游戲開發---View線程繪動畫與顯示總結

編輯:關於Android編程

    用View來進行動態繪圖,要解決的一個很重要的問題就是如何重繪屏幕。Android的View類中提供了一個postInvalidate()方法,會自動調用View中onDraw方法來重新繪制屏幕。
下面一段代碼實現了任意線拖動紅線的位置。並能自動自動更新線的位置.
 
 
[java] 
/*
 * 用線程來更新View, 畫一條線
 */   www.2cto.com
public class ThreadUpdateView extends View 

    Paint paint = null; 
    int y = 0; 
 
    public ThreadUpdateView(Context context) 
    { 
        super(context); 
        paint = new Paint(); 
        MyThread myThread = new MyThread(); 
        myThread.start();   //啟動線程後紅線會自動下移. 
        this.setFocusable(true); 
    } 
 
    @Override 
    protected void onDraw(Canvas canvas) 
    { 
        super.onDraw(canvas); 
        paint.setColor(Color.RED); 
        paint.setStrokeWidth(5); 
        canvas.drawLine(0, y, 444, y, paint);//畫線 
    } 
 
    class MyThread extends Thread 
    { 
 
        @Override 
        public void run() 
        { 
            //一直讓他的值加, 小於400 
            while (y < 400) 
            { 
                y++; 
                try 
                { 
                    Thread.sleep(100);  //慢點更新 
                } catch (InterruptedException e) 
                { 
                    e.printStackTrace(); 
                } 
                postInvalidate();//View裡面的方法, 讓重畫, 及重新調用onDraw方法. 因為y已經更新. 
            } 
        } 
 
    } 
     
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
        return super.onKeyDown(keyCode, event); 
    } 
     
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) 
    { 
        System.out.println("View  onKeyUp " + event.getAction()); 
        return super.onKeyUp(keyCode, event); 
    } 
     
    /*
     * 做一個功能, 想把線拖動到哪裡就拖動到哪裡.
     */ 
    @Override 
    public boolean onTouchEvent(MotionEvent event) 
    { 
        System.out.println("View "+event.getAction() + " " + event.getX() + " " 
                + event.getY()); 
        //return super.onTouchEvent(event); 
        y = (int) event.getY();  //將當前點擊拖動的位置賦值給y 
        postInvalidate();   //重新調用onDraw()方法, 來進行重繪. 
         
        return true; 
    } 

 

 在此會出現兩個關於屏幕事件的問題:
一、如何讓View來捕獲按鍵及觸屏事件, 而不是Activity?
我們知道,當你點擊屏幕的時候,系統是先響應Activity中的onTouchEvent方法(onKeyUp等方法也是)的,而不是響應我們自己設定顯示的View。這就會造成我們在View中寫的onTouchEvent失效。
有2中解決辦法:
方法1. 使用代理。即在Activity中的onTouchEvent方法中直接調用ThreadUpdateView實例中的onTouchEvent方法。
方法2. 使View強行獲得焦點。在View的構造方法中設置this.setFocusable(true);
 
二、如何讓觸摸事件不傳遞給Activity?
我們知道,在Android中觸摸事件是能進行傳遞的。如View執行完後, 按下事件就傳遞給Activity。
那麼如何讓他不傳遞呢?
解決方法:
將onTouchEvent的返回值寫成return true;
而不是return super.onTouchEvent(event);


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved