2017-08-05 7 views
2

私はアンドロイドコードを書いています。レコード、一時停止、フレームを取る3つのボタンがあります。録画ボタンはビデオを録画し、一時停止ボタンはVideoViewに表示されるビデオを一時停止し、テイクフレームボタンはimageViewに一時停止したフレームを表示します。今私は3つのスレッドが必要です - 1つのメインスレッドはユーザーの操作(一時停止ボタン)、1つのサブスレッドはビデオ(録画ボタン)を記録し、2つ目のサブスレッドはフレーム(フレームボタンを取る)を保存します。さまざまなボタンを使ったマルチスレッド表示: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(一時停止したビデオを再生)ボタンをもう1つ追加したい場合は、どうすればいいのか理解できません。 Androidでこのようなプログラムをスレッド化する方法を教えてもらえますか?変更または別のスレッドがViewオブジェクトに処理しようとする場合にのみ、UIスレッドで任意のアクションを行うことができます

答えて

2

Viewオブジェクトは、それは、

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

は、詳細についてはおthisを参照することができ、このようthis

を呼び出す必要があります
関連する問題