ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드 앱에서 이미지 파일 선택하여 보여주기
    카테고리 없음 2023. 4. 21. 13:18
    public class MainActivity extends AppCompatActivity {
        private final int GET_GALLERY_IMAGE = 200;
        private ImageView imageview;
        private Button pickButton;
    
        @SuppressLint("MissingInflatedId")
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            pickButton = (Button)findViewById(R.id.pickButton);
            pickButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
    
                    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                    intent.setType("image/*");
                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
                    startActivityForResult(intent, GET_GALLERY_IMAGE);
                }
            });
        }
    
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // 화면 가로축의 크기를 구함
            DisplayMetrics displayMetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
            final int screenWidth = displayMetrics.widthPixels;
    
    // 이미지 리사이즈와 썸네일 크기 계산을 위한 변수 선언
            final int THUMBNAIL_SIZE = (int) (screenWidth / 3.45);
    //        final float THUMBNAIL_RATIO = 1/3f;
            Log.d("하면 사이즈", String.valueOf(screenWidth)+ "/" +  String.valueOf(THUMBNAIL_SIZE));
            super.onActivityResult(requestCode, resultCode, data);
            LinearLayout linearLayout = findViewById(R.id.linear_layout); // 이미지뷰를 추가할 레이아웃
    
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.setMargins(0, 0, 16, 0); // 이미지뷰 간의 간격 설정
            layoutParams.gravity = Gravity.CENTER; // 가운데 정렬
    
    
            if (requestCode == GET_GALLERY_IMAGE && resultCode == RESULT_OK && data != null) {
                ClipData clipData = data.getClipData();
                if (clipData != null) {
                    // 여러 이미지 선택
                    // 이미지뷰 묶음을 담을 수평 레이아웃 생성
                    LinearLayout horizontalLayout = null;
    
                    for (int i = 0; i < clipData.getItemCount(); i++) {
                        Uri selectedImageUri = clipData.getItemAt(i).getUri();
                        Log.d("이미지 경로", String.valueOf(selectedImageUri));
    
                        ImageView imageView = new ImageView(this);
    
    // 이미지뷰에 Glide를 이용하여 이미지 설정
                        Glide.with(this)
                                .load(selectedImageUri)
    //                            .thumbnail(THUMBNAIL_RATIO) // 원본 이미지의 1/3 크기로 썸네일 생성
                                .override(THUMBNAIL_SIZE, THUMBNAIL_SIZE) // 가로와 세로 크기가 screenWidth/3 픽셀인 이미지 생성
                                .centerCrop()
                                .into(imageView);
    
                        // 3열로 출력하기 위해 이미지뷰 묶음을 담을 수평 레이아웃 생성
                        if (i % 3 == 0) {
                            horizontalLayout = new LinearLayout(this);
                            horizontalLayout.setOrientation(LinearLayout.HORIZONTAL);
                            linearLayout.addView(horizontalLayout);
                        }
    
                        // 이미지뷰를 수평 레이아웃에 추가
                        horizontalLayout.addView(imageView, layoutParams);
                    }
    
                } else {
                    // 하나의 이미지 선택
                    Uri selectedImageUri = data.getData();
                    ImageView imageView = new ImageView(this);
                    Log.d("이미지 경로", String.valueOf(selectedImageUri));
                    imageView.setImageURI(selectedImageUri); // 이미지 설정
                    linearLayout.addView(imageView); // 레이아웃에 이미지뷰 추가
                }
            }
    
        }
    
    }
Designed by Tistory.