본문 바로가기
android

8장 기능/실습 - 15 ( GridView )

by 뱅뱅뱅뱅뱅 2024. 10. 10.

 

grid01.setAdapter(new ImageAdapter(this));

 

 

  •  BaseAdapter
    • 베이스 어댑터는 추상 클래스로, 사용자 정의 어댑터를 만들 때 상속하여 구현하게 됩니다.
    • 주로 ListView나 GridView와 같은 뷰에 데이터를 연결하는 데 사용
    • @ 필수 메소드
      • getCount()
        • Adapter에 몇 개의 항목이 있는지 확인
      • getItem()
        • 위치의 항목을 조사하여 배열의 몇 번째 요소인지를 리턴
      • getItemId()
        • Position 위치의 ID 리턴, 첨자 자체가 고유 ID이므로 첨자를 그대로 리턴
      • getView()
        • 항목 하나를 출력하기 위한 뷰를 생성하여 리턴
        • 커스텀 어댑터를 정의할 때, 이 메소드를 재정의하여 커스텀 레이아웃을 생성
        • 항목 뷰를 생성하는 가장 핵심적인 메소드 

 

  •  GridView
    • 2차원 격자 모양 필요한 항목을 배치, 선택
    • 속성
      • android:verticalSpacing
        • 항목 간에 상하 여백을 얼마나 줄 것인가를 결정
      • android:horizotalSpacing
        • 항목 간의 좌우 여백을 얼마나 줄 것인가를 결정
      • android:columnWidth
        • 컬럼의 너비 지정
      • android:numCoumns
        • 한 줄에 표시되는 컬럼 수, auto_fit으로 하면 자동 조절

 

 

getView(int i, View view, ViewGroup viewGroup)
화면에 표시할 항목의 번호
해당 위치에 사용 중인 뷰
이 뷰가 속한 부모 ViewGroup

 

 

  • 소스 
    • setAdapter : 그리드뷰 객체에 사용자가 정의한 커스텀어댑터 연결
    • BaseAdapter 상속 후 필스 매소드 정의

 

 

 

  • view가 null이면, 새 ImageView를 생성합니다.
  • new ImageView(mContext):
    • 새로운 ImageView 객체를 생성합니다. mContext는 Adapter가 초기화될 때 전달된 컨텍스트입니다.
  • setLayoutParams:
    • 뷰의 크기를 150x150으로 설정합니다.
  • setScaleType:
    • 이미지를 CENTER_CROP 방식으로 설정하여, ImageView 중앙을 기준으로 잘라서 화면에 맞춥니다.
  • setPadding:
    • 이미지 주변에 4픽셀 간격의 패딩을 설정합니다.
  • view가 null이 아니라면, 이전에 생성되었던 뷰 (convertView)를 재사용하고, 그 뷰를 imageView01에 할당합니다.

 

  • imageView01.setImageResource(mThumbIds[i]);
    • mThumbIds 배열에서 인덱스 i에 해당하는 이미지 리소스를 불러와 ImageView에 설정합니다.

 

 

 

이미지 크기 변환을 어떻게?

이미지 크기 변환 전
이미지 크기 변환 후

 

 

이미지 크기 변환 전 코드

imageView01.setLayoutParams(new ViewGroup.LayoutParams(85, 85));
imageView01.setPadding(8, 8, 8, 8);

 

이미지 크기 변환 후 코드

imageView01.setLayoutParams(new ViewGroup.LayoutParams(150, 150));
imageView01.setPadding(4, 4, 4, 4); // 패딩도 조금 줄일 수 있습니다.

 

 

4. android:numColumns

android:numColumns="3": 한 줄에 3개의 열이 표시

auto_fit: 화면 크기에 맞춰 열의 개수가 자동으로 결정

 

5. android:stretchMode

GridView에서 남는 공간을 어떻게 처리할지를 결정

간단히 말해, 화면 크기와 그리드 항목 크기가 딱 맞지 않을 때, 그 여유 공간을 어떻게 메울지를 설정하는 속성

  • columnWidth: 열의 너비를 늘려서 남는 공간을 채움.
  • spacingWidth: 열 사이의 간격을 늘려서 남는 공간을 채움.
  • none: 아무것도 늘어나지 않음.
  • spacingWidthUniform: 간격이 균일하게 늘어남.

 

6. android:gravity

  • 그리드 안의 항목의 배치를 결정
  • left, right, top, bottom, center 등이 있으며, 이 값들을 조합하여 사용할 수 있습니다.

 

 

 

 

 

 

 

 

BaseAdapter



getCount()
getItem()
getItemId()
getView()


 

 

 


항목 하나 출력하기 위해 뷰 생성 후 리턴

getView(int i, View view, ViewGroup viewGroup)
항해항



항목의 번호
해당 위치에 사용 중인 화면 표시 위젯
항목 표시를 위한 부모 위젯



반드시 설정이 필요한 레이아웃

{
android:horizontalSpacing
android:verticalSpacing
android:columnWidth
android:numColumns

android:stretchMode
android:gravity
}


- 항목 간 좌우 여백
- 항목간 상하 여백
- 각 열의 너비
- 열 (가로) 개수

- 남는 공간 배정
- 가운데 정렬



4. android:numColumns
android:numColumns="3": 한 줄에 3개의 열이 표시
auto_fit: 화면 크기에 맞춰 열의 개수 자동 결정

 

5. android:stretchMode
GridView에서 남는 공간을 어떻게 처리할지를 결정
화면 크기와 그리드 항목 크기가 딱 맞지 않을 때, 그 여유 공간을 어떻게 메울지를 설정하는 속성

columnWidth: 열의 너비를 늘려서 남는 공간을 채웁니다.
spacingWidth: 열 사이의 간격을 늘려서 남는 공간을 채웁니다.
none: 아무것도 확장되지 않음.
spacingWidthUniform: 간격이 균일하게 늘어남.
 

 

6. android:gravity
항목 배치를 결정
가능한 값:
left, right, top, bottom, center 등이 있으며, 이 값들을 조합하여 사용할 수 있습니다.