Select Image From Gallary ทำไงดี?


สวัสดีครับ วันนี้เราจะมาเรียนรู้ในเรื่องการเลือก Image จากอัลบัมมาใส่ใน ImageView ในการทำโปรไฟล์ของผู้ใช้ เรามาดูว่ามีวิธีการในการเขียนโค้ดยังไง ลองดูครับ
เปิดไฟล์ layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"       
    tools:context="com.geekcreator.MainActivity">

            <ImageView
            android:id="@+id/image_view"
            android:layout_width="200dp"
            android:layout_height="200dp"
            />

</RelativeLayout>

เปิดไฟล์ java/MainActivity.java

public class MainActivity extends AppCompatActivity {

private static int RESULT_LOAD_IMAGE = 1;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
ImageView imageView = (ImageView)findViewById(R.id.image_view );
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

                startActivityForResult(i, RESULT_LOAD_IMAGE);
            }
        });
}

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            Uri selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };

            Cursor cursor = getApplicationContext().getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
                     

            cursor.close();

            ImageView imageView = (ImageView) findViewById(R.id.image_view);

            Bitmap bmp = null;
            try {
                bmp = getBitmapFromUri(selectedImage);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
          
            imageView.setImageBitmap(bmp);

        }
    }
private Bitmap getBitmapFromUri(Uri uri) throws IOException {

        ParcelFileDescriptor parcelFileDescriptor = getApplicationContext().getContentResolver().openFileDescriptor(uri, "r");
        FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
        Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
        parcelFileDescriptor.close();
        return image;
    }


}


ถ้าหากรูปที่เราเลือกมาจากอัลบัมมีขนานใหญ่จนเกินไป อาจจะทำให้แอปพลิชันของเราทำงานช้าได้จึงมีการแปลงขนานของรูปก็ที่จะเอาไปใส่ใน ImageView

public Bitmap getResizedBitmap(Bitmap bm,int H ,int W){
        int width = bm.getWidth();
        int height = bm.getHeight();

        float scaleWidth = ((float)W)/width;
        float scaleHeight = ((float)H)/height;

        Matrix matrix = new Matrix();

        matrix.postScale(scaleWidth,scaleHeight);

        Bitmap resizedBitmap = Bitmap.createBitmap(bm,0,0,width,height,matrix,false);

        return resizedBitmap;
    }


สำหรับวิธีการเลือกรูปจากอัลบัมก็ขอจบไว้เพียงเท่านี้หากมีข้อสงสัยสามารถคอมเมนต์ได้ที่โพสต์ด้านล่างเลยครับ วันนาี้คงต้องลาไปก่อนสวัสดีครับ

ความคิดเห็น

บทความที่ได้รับความนิยม