출처: https://3months.tistory.com/307 [Deep Play]

안드로이드/연습

[Android] 영화 포스터 보기(GridLayout)

코딩하는 랄뚜기 2021. 8. 27. 16:18

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <GridView
        android:id="@+id/gridView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:numColumns="4"/>
</LinearLayout>

dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/ivPoster"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>

MainActivity.java

package com.example.project11_1;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("그리드뷰 영화 포스터");

        final GridView gv = (GridView) findViewById(R.id.gridView1);
        MyGridAdapter gAdpater = new MyGridAdapter(this);
        gv.setAdapter(gAdpater);
    }

    //GridLayout을 이용하기 위해서는 BaseAdapter를 extends 해줘야 한다.
    public class MyGridAdapter extends BaseAdapter {
        Context context;
        public MyGridAdapter(Context c){
            context = c;
        }

        @Override
        public int getCount() {
            return postID.length;
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }
        Integer[] postID={
                R.drawable.gae,R.drawable.job,R.drawable.kill,R.drawable.king,R.drawable.legend,
                R.drawable.lion,R.drawable.monster,R.drawable.ring,R.drawable.time,R.drawable.gae,R.drawable.job,R.drawable.kill,R.drawable.king,R.drawable.legend,
                R.drawable.lion,R.drawable.monster,R.drawable.ring,R.drawable.time,R.drawable.gae,R.drawable.job,R.drawable.kill,R.drawable.king,R.drawable.legend,
                R.drawable.lion,R.drawable.monster,R.drawable.ring,R.drawable.time
        };
        String[] postNAME={
                "위대한 개츠비","극한직업","암살","광해","레전드","사자","괴물","반지의 제와","어바웃 타임",
                "위대한 개츠비","극한직업","암살","광해","레전드","사자","괴물","반지의 제와","어바웃 타임",
                "위대한 개츠비","극한직업","암살","광해","레전드","사자","괴물","반지의 제와","어바웃 타임"
        };
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageview = new ImageView(context);
            // 이미지뷰의 크기를 200x300로 크기를 지정했다.
            imageview.setLayoutParams(new GridView.LayoutParams(200,300));
            // 이미지뷰를 각 그리드뷰 칸의 중앙에 배치한다.
            imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
            // 영화 포스트가 너무 빽빽하지 않도록 공백을 적당히 설정한다.
            imageview.setPadding(5,5,5,5);
            // 이미지뷰에 영화 포스터 1개(파라미터로 넘어온 position 위치)를 적용한다.
            final int pos = position;
            imageview.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v){
                    View dialogView = (View) View.inflate(MainActivity.this,R.layout.dialog,null);
                    AlertDialog.Builder dlg = new AlertDialog.Builder(MainActivity.this);
                    ImageView ivPoster=(ImageView) dialogView.findViewById(R.id.ivPoster);
                    ivPoster.setImageResource(postID[pos]);
                    dlg.setTitle(postNAME[pos]);
                    dlg.setIcon(R.drawable.ic_launcher_foreground);
                    dlg.setView(dialogView);
                    dlg.setNegativeButton("닫기",null);
                    dlg.show();
                }
            });
            imageview.setImageResource(postID[position]);
            return imageview;
        }
    }
}

 

실행 화면