2017-09-05 3 views
0

Ich versuche, ein aufgenommenes Bild auf meiner MainActivity anzuzeigen. Das Problem ist, dass onActivityResult bereits definiert ist. Mein erstes onActivityResult ist für das VideoView. Jetzt muss ich ein neues onActivityResult für mein Bild setzen. Wie mache ich das möglich? Muss ich nur ein onActivityResult haben? Muss ich das zweite onActivityResult auf das erste onActivityResult setzen?ImageView und VideoView für dieselbe Aktivität

Hier ist mein Code:

public class MainActivity extends Activity { 
 

 
    private static final int CAMERA_REQUEST = 1888; 
 
    private ImageView imageView; 
 
    Button buttonPlay; 
 
    Button buttonFullScreen; 
 
    static final int REQUEST_VIDEO_CAPTURE = 1; 
 
    VideoView resultvideo; 
 
    MediaController mediacontroller; 
 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 

 
     this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 

 
     setContentView(R.layout.activity_main); 
 

 
     resultvideo = (VideoView)findViewById(R.id.videoView); 
 
     mediacontroller = new MediaController(MainActivity.this); 
 

 
     mediacontroller.setAnchorView(resultvideo); 
 

 
     resultvideo.setMediaController(mediacontroller); 
 

 
     Button click = (Button)findViewById(R.id.buttonRecord); 
 
     resultvideo = (VideoView)findViewById(R.id.videoView); 
 

 
     this.imageView = (ImageView)this.findViewById(R.id.imageView); 
 
     Button photoButton = (Button) this.findViewById(R.id.buttonCapture); 
 
     photoButton.setOnClickListener(new View.OnClickListener() { 
 

 
      @Override 
 
      public void onClick(View v) { 
 
       Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
 
       startActivityForResult(cameraIntent, CAMERA_REQUEST); 
 
      } 
 
     }); 
 
    } 
 

 
    public void dispatchTakeVideoIntent(View v) { 
 
     Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
 
     if (takeVideoIntent.resolveActivity(getPackageManager()) != null) { 
 
      startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE); 
 
     } 
 
    } 
 

 
    @Override 
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     final Uri videoUri = data.getData(); 
 
     if (requestCode == REQUEST_VIDEO_CAPTURE && resultCode == RESULT_OK) { 
 

 
      resultvideo.setVideoURI(videoUri); 
 
      mediacontroller.setAnchorView(resultvideo); 
 
      resultvideo.pause(); 
 

 
     } 
 
     buttonPlay = (Button) findViewById(R.id.buttonPlay); 
 
     { 
 
      buttonPlay.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
        mediacontroller.show(); 
 
        mediacontroller.setAnchorView(resultvideo); 
 
        resultvideo.start(); 
 
       } 
 
      }); 
 
     } 
 

 
     buttonFullScreen = (Button) findViewById(R.id.buttonFullScreen); 
 
     { 
 
      buttonFullScreen.setOnClickListener(new View.OnClickListener() { 
 
       @Override 
 
       public void onClick(View v) { 
 
        Intent intent = new Intent(MainActivity.this, Main2Activity.class); 
 
        intent.putExtra("VIDEO_URI", videoUri.toString()); 
 
        startActivity(intent); 
 
       } 
 
      }); 
 
     } 
 
    } 
 

 
    @Override 
 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
 
     if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { 
 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
 
      imageView.setImageBitmap(photo); 
 
     } 
 
    } 
 

 
}

+0

Es ist nicht Ihr Problem in Bezug auf, aber sollten Sie nicht Sicht Initialisierungen in onActivityResoult platzieren. Platziere es in einer Init-Funktion, die du in onCreate einfügen kannst, dies ist nur ein Beispiel. Überprüfen Sie auch die ButterKnife-Bibliothek. – barotia

Antwort

2

zwei Ansicht Imageview für Bild- und Videoview für Video erstellen und diese verwenden:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode){ 
      case CAMERA_REQUEST: 
       if (resultCode == Activity.RESULT_OK) { 
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo); 
        //Hide video view 
        videoview.setVisibility(View.GONE); 

       } 
       break; 
      case REQUEST_VIDEO_CAPTURE: 
       //bring your video stuff here 
       videoview.setVisibility(View.VISIBLE); 
       imageView.setVisibility(View.GONE); 
       break; 
     } 
    } 
0

Sie benötigen nur eine einzige onActivityResult(int requestCode, int resultCode, Intent data) für Ihre Aktivitätsklasse

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      switch (requestCode){ 
       case CAMERA_REQUEST: 
        if (resultCode == Activity.RESULT_OK) { 
         Bitmap photo = (Bitmap) data.getExtras().get("data"); 
         imageView.setImageBitmap(photo); 
        } 
        break; 
       case REQUEST_VIDEO_CAPTURE: 
        //bring your video stuff here 
        break; 
      } 
     } 

Ihre onActivityResult wie der obige Code aussehen sollte. Jede Funktion kann nur einmal in einer Klasse mit den gleichen Typen und der gleichen Reihenfolge der Parameter deklariert werden.

0

Sie können nicht zwei Funktionen mit der gleichen Signatur haben.

Sie müssen eine einzige onActivityResult haben, und in der if-Anweisung müssen Sie die resoult behandeln.

Beispiel

if(resultCode == Activity.RESULT_OK){  
     if (requestCode == CAMERA_REQUEST) { 
      ...  
     } 
     if (requestCode == REQUEST_VIDEO_CAPTURE) { 
      ... 
     } 
} 
Verwandte Themen