2015-10-18 108 views
0

我正在構建一項活動,用戶在該按鈕上按下按鈕並將其帶到可使用默認相機應用拍照的屏幕,然後將其添加到位圖列表以供對象存儲。它還顯示在活動屏幕上拍攝的這些照片。然而,我目前的設置方式是它只允許出現一張單張照片圖像照片,我想這樣做是爲了讓用戶可以繼續拍照,並且會繼續在活動中顯示它們,但也會保留將它們添加到列表中。 這裏是代碼:Android拍照並在活動中創建帶有照片的小畫廊

public class MainActivity extends Activity implements OnClickListener { 

    ImageView ivThumbnailPhoto; 
    Bitmap bitMap; 
    static int TAKE_PICTURE = 1; 

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

     btnTackPic = (Button) findViewById(R.id.btnTakePic); 
     ivThumbnailPhoto = (ImageView) findViewById(R.id.ivThumbnailPhoto); 

     if(hasCamera()){ 
      tvHasCamera.setBackgroundColor(0xFF00CC00); 
      tvHasCamera.setText("You have Camera"); 
     } 

     if(hasDefualtCameraApp(MediaStore.ACTION_IMAGE_CAPTURE)){ 
      tvHasCameraApp.setBackgroundColor(0xFF00CC00); 
      tvHasCameraApp.setText("You have Camera Apps"); 
     } 

     btnTackPic.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View view) { 

     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     startActivityForResult(intent, TAKE_PICTURE); 

    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

     if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 
      // get bundle 
      Bundle extras = intent.getExtras(); 

      // get bitmap 
      bitMap = (Bitmap) extras.get("data"); 
      ivThumbnailPhoto.setImageBitmap(bitMap); 

     } 
    } 

    private boolean hasCamera(){ 
     return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 

    private boolean hasDefualtCameraApp(String action){ 
     final PackageManager packageManager = getPackageManager(); 
     final Intent intent = new Intent(action); 
     List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 

     return list.size() > 0; 

    } 
} 

Layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="10dp" 
    tools:context=".MainActivity" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/thumbnailPhoto" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" /> 

    <Button 
     android:id="@+id/takePicButton" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_horizontal" 
     android:text="Take a Picture" /> 

</LinearLayout> 

我假設我可以用照片代替的ImageView這樣做,但我有困難實現這樣的解決方案,因此任何幫助將是偉大的 感謝

回答

0

可以解碼後使用URI顯示上的活動也爲位圖

public class MainActivity extends Activity implements OnClickListener { 

     ImageView ivThumbnailPhoto; 
     Bitmap bitMap; 
     static int TAKE_PICTURE = 1; 

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

      btnTackPic = (Button) findViewById(R.id.btnTakePic); 
      ivThumbnailPhoto = (ImageView) findViewById(R.id.ivThumbnailPhoto); 

      if(hasCamera()){ 
       tvHasCamera.setBackgroundColor(0xFF00CC00); 
       tvHasCamera.setText("You have Camera"); 
      } 

      if(hasDefualtCameraApp(MediaStore.ACTION_IMAGE_CAPTURE)){ 
       tvHasCameraApp.setBackgroundColor(0xFF00CC00); 
       tvHasCameraApp.setText("You have Camera Apps"); 
      } 

      btnTackPic.setOnClickListener(this); 

     } 

     @Override 
     public void onClick(View view) { 

      Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(Intent.createChooser(intent, "Select Picture"), TAKE_PICTURE); 

     } 

     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent intent) { 

      if (requestCode == TAKE_PICTURE && resultCode== RESULT_OK && intent != null){ 

       // get Uri 
       ivThumbnailPhoto.setImageUri(intent.getData()); 

      } 
     } 

     private boolean hasCamera(){ 
      return getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 
     } 

     private boolean hasDefualtCameraApp(String action){ 
      final PackageManager packageManager = getPackageManager(); 
      final Intent intent = new Intent(action); 
      List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 

      return list.size() > 0; 

     } 
    }