2017-08-05 9 views
2

So schreibe ich einen Android-Code, wo es 3 Tasten: Aufnahme, Pause, Frame zu nehmen. Mit der Aufnahmetaste wird ein Video aufgenommen, mit der Pause-Taste wird das in VideoView angezeigte Video angehalten und mit der Schaltfläche "Take Frame" wird der angehaltene Frame in imageView angezeigt. Jetzt brauche ich 3 Threads - ein Haupt-Thread ist für Benutzerinteraktion (Pause-Schaltfläche), ein Unter-Thread zeichnet das Video auf (Record-Button) und der zweite Sub-Thread speichert den Frame (Frame-Button).Multi-threading mit verschiedenen Tasten anzeigen: 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 
     } 

habe ich versucht, verschiedene Threads bei onClick (Ansicht Ansicht) von verschiedenen Tasten, aber am Ende setzte die Anwendung abstürzt sagt die Fehlermeldung „Nur den Original-Thread, das eine Ansicht Hierarchie erstellt wird, kann ihren Standpunkt berühren.“ Und auch wenn ich noch einen Button hinzufügen möchte, der PLAY ist (spielt das pausierte Video ab) dann wie soll ich es schreiben, kann ich nicht verstehen. Kann mir hier jemand helfen, ein solches Programm in Android zu fädeln?

Antwort

2

View-Objekt kann nur durch UI-Thread eine Aktion ändern oder tun, wenn ein anderer Thread auf dem View Objekt zu verarbeiten versucht, sollte es so nennen,

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

Weitere Informationen Sie this beziehen, this