安卓拍照,并在活动中创建照片的小图库



我正在构建一个活动,用户按下一个按钮,它将他们带到一个屏幕,在那里他们可以使用默认的相机应用程序拍照,然后将其添加到位图列表,以便稍后进行对象存储。它还会在Activity屏幕上显示这些照片。然而,我目前设置它的方式是,它只允许单个imageview照片出现,我想让它让用户可以继续拍照,它会继续在活动上显示它们,但也会继续将它们添加到列表中。下面是代码:

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来做到这一点,但我很难实现这样的解决方案,所以任何帮助将是伟大的由于

你可以在解码成位图后使用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;
        }
    }

最新更新