2017-08-05 51 views
2

所以我寫了一個android代碼,其中有3個按鈕:記錄,暫停,採取框架。錄製按鈕錄製視頻,暫停按鈕暫停VideoView中的視頻顯示,Take Frame按鈕顯示imageView中的暫停幀。現在我需要3個線程 - 一個主線程用於用戶交互(暫停按鈕),一個子線程記錄視頻(記錄按鈕),第二個子線程保存幀(取幀按鈕)。多線程與不同的按鈕視圖:Android

protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      mvideoview = (VideoView) findViewById(R.id.videoView); 
      imgview = (ImageView) findViewById(R.id.imageView); 
      mrecord = (Button) findViewById(R.id.button); 
      mpause = (Button) findViewById(R.id.button2); 
      mtakeframe = (Button) findViewById(R.id.button4); 

      mrecord.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
          dispatchTakeVideoIntent(); 
          mvideoview.start(); 
         } 
      }); 

      mpause.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        mvideoview.pause(); 
       } 
      }); 


      mtakeframe.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 
          Bitmap bmp = takeFrame(); 
          imgview.setImageBitmap(bmp); 
         } 
        }); 
     } 

     private void dispatchTakeVideoIntent() { 
      //code directs towards the video recorder screen 
     } 

     protected void onActivityResult(int requestcode, int resultcode, Intent intent) { 
      //recorded video sent back and its path stored 
     } 

     public Bitmap takeFrame() { 
      //paused frame shown in imageView 
     } 

我嘗試在不同的onClick按鈕(查看圖),但在最後的應用程序崩潰說錯誤把不同的線程「只有創建視圖層次可以觸摸其觀點原來的線程。」另外,如果我想再添加一個PLAY按鈕(播放暫停的視頻),那麼我應該如何寫它,我無法理解。有人可以幫助我在這裏如何在Android中線程這樣的程序?

回答

2

視圖對象可以修改或者如果另一個線程試圖查看對象的處理只能由UI線程做任何操作,它應該調用這個樣子,

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       // do the view operation here 
      } 
     }); 

欲瞭解更多信息,可以參考thisthis