2017年4月29日 星期六

讓Class View跟一般class Thread一模一樣

如何讓Class View跟一般class Thread一模一樣,當要使用Canvas一定要繼承View才能作畫,就沒法繼承Thread,因為java只能單一繼承
若要View能有Thead功能,只能實作Runnable,但是class實作Runnable是沒有像Thread有start()函式,那要test_vew開始執行續要這樣,
要如下面這要,每次都要new Thread,我覺的這樣太麻煩
//實例化test_view
test_view mtest_view=new test_view(.....);
//mtest_view新的Thread才能start(),
new Thread(mtest_view).start();

Example 1:

public class test_view extends View implements Runnable{

@Override
    public void run(){
     while(true){
       this.update();//update view產生動畫
      }
    }
@Override
    protected void onDraw(Canvas canvas) {
      //處理canvas
   }
}

我想到一個方法,在test_view 加一個start()函式,寫入new Thread(this).start(),那要test_vew開始執行續就跟Class Thread一模一樣
//實例化test_view
test_view mtest_view=new test_view(.....);
//開始Thread
mtest_view.start();

Example 2:

public class test_view extends View implements Runnable{

    public void start(){
        new Thread(this).start();
    }
@Override
    public void run(){
     while(true){
       this.update();//update view產生動畫
      }
    }
@Override
    protected void onDraw(Canvas canvas) {
      //處理canvas
   }
}


若要實例化就開始Thread,建構子加入this.start(),這樣在實例化就會開始Thread了
//實例化test_view且開始Thread
test_view mtest_view=new test_view(.....);

Example 3:

public class test_view extends View implements Runnable{
    public test_view(Context t){
     super(t)
     this.start();
    }
    public void start(){
        new Thread(this).start();
    }
@Override
    public void run(){
     while(true){
       this.update();//update view產生動畫
      }
    }
@Override
    protected void onDraw(Canvas canvas) {
      //處理canvas
   }
}

這樣extends View implements Runnable對用view來作動畫或遊戲就很方便,一個view就是一個Thread,每各View就有個別的生命,可產生不同行為

沒有留言: