Android 개발 학습 노트 Gallery 와 GridView 에 대한 분석

25198 단어 GalleryGridView
갤러리 소개
Gallery(갤러리)는 중심 항목 을 잠 그 고 수평 스크롤 목록 을 가 진 보기 로 그림 을 탐색 하고 이벤트 표시 정보 에 응답 할 수 있 습 니 다.Gallery 는 이미지 Switcher 구성 요소 와 결합 하여 미리 보기 그림 을 통 해 그림 을 탐색 하 는 효 과 를 실현 할 수 있 습 니 다.
Gallery 에서 자주 사용 하 는 XML 속성
속성 이름
묘사 하 다.
android:animationDuration
레이아웃 이 변 할 때 애니메이션 의 변환 에 필요 한 시간(밀리초 단위)을 설정 합 니 다.애니메이션 이 시 작 될 때 만 시간 을 잽 니 다.이 값 은 반드시 정수 여야 한다.예 를 들 어:100.
android:gravity
대상 의 X 와 Y 축 에 내용 을 어떻게 배치 할 지 지정 합 니 다.상수 중 하나 이상 을 지정 합 니 다("|"분할 사용)
Constant
Value
Description
top
0x30
용기 꼭대기 에 바짝 붙 어서 크기 를 바 꾸 지 않 는 다.
bottom
0x50
용기 밑 에 바짝 붙 어서 크기 를 바 꾸 지 않 습 니 다.
left
0x03
용기 왼쪽 에 바짝 붙 어서 크기 를 바 꾸 지 않 습 니 다.
right
0x05
용기 오른쪽 에 바짝 붙 어서 크기 를 바 꾸 지 않 습 니 다.
center_vertical
0x10
수직 으로 가운데 로 크기 를 바 꾸 지 않 습 니 다.
fill_vertical
0x70
수직 방향 으로 용기 가득 채 울 때 까지 스 트 레 칭
center_horizontal
0x01
수평 을 가운데 로 하고 크기 를 바 꾸 지 않 는 다.
Fill_horizontal
0x07
수평 방향 으로 늘 려 용 기 를 가득 채 워 줍 니 다.
center
0x11
가운데 정렬,크기 변경 하지 않 음
fill
0x77
수평 과 수직 방향 으로 늘 려 용기 에 가득 채 워 줍 니 다.
clip_vertical
0x80
수직 절단(대상 가장자리 가 용 기 를 초과 할 때 상하 가장자리 가 초과 한 부분 을 잘라 냅 니 다)
clip_horizontal
0x08
수평 잘라 내기(대상 가장자리 가 용 기 를 초과 할 때 좌우 가장자리 가 초과 한 부분 을 잘라 냅 니 다)
android:spacing
그림 사이 의 간격
android:unselectedAlpha
선택 하지 않 은 항목 의 투명도(Alpha)를 설정 합 니 다.이 값 은 float 형식 이 어야 합 니 다.예 를 들 어"1.2"입 니 다.
먼저 Gallery 가 단독으로 사용 하 는 예 를 소개 합 니 다.
MainActivity.java

package com.android.gallerydemo; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.Gallery; 
import android.widget.ImageView; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
 
  private Gallery gallery; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    gallery = (Gallery)findViewById(R.id.gallery); 
    //        
    gallery.setAdapter(new ImageAdapter(this)); 
    //      
    gallery.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?>parent, View v, int position, long id) { 
      Toast.makeText(MainActivity.this, "    "+(position+1)+"   ", Toast.LENGTH_LONG).show(); 
     } 
   }); 
  } 
} 
 
class ImageAdapter extends BaseAdapter{ 
 //  Context  
 private Context context; 
 //      
 private Integer[] imageInteger={ 
     R.drawable.pic1, 
     R.drawable.pic2, 
     R.drawable.pic3, 
     R.drawable.pic4, 
     R.drawable.pic5, 
     R.drawable.pic6, 
     R.drawable.pic7 
 }; 
  
 //   ImageAdapter 
 public ImageAdapter(Context c){ 
   context = c; 
 } 
 
 @Override 
 //        
 public int getCount() { 
   return imageInteger.length; 
 } 
 
 @Override 
 //           
 public Object getItem(int position) { 
 
   return position; 
 } 
 
 @Override 
 //           
 public long getItemId(int position) { 
   // TODO Auto-generated method stub 
   return position; 
 } 
 
 @Override 
 public View getView(int position, View convertView, ViewGroup parent) { 
 
   ImageView imageView = new ImageView(context); 
   // ImageView     
   imageView.setImageResource(imageInteger[position]); 
   //       
   imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
   //       128x192   
   imageView.setLayoutParams(new Gallery.LayoutParams(128, 192)); 
   return imageView; 
 } 
}
main.xml

<?xml version="1.0" encoding="utf-8"?> 
<Gallery xmlns:android="http://schemas.android.com/apk/res/android"  
   android:id="@+id/gallery"     
   android:layout_width="fill_parent" 
   android:layout_height="wrap_content" 
   android:gravity="center_vertical" 
   android:background="?android:galleryItemBackground" 
/>
효과 그림:

Gallery 와 ImageSwitcher 구성 요 소 를 결합 하여 사용 하 는 예:
MainActivity.java

package com.android.gallerytest; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.Window; 
import android.view.animation.AnimationUtils; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.Gallery; 
import android.widget.ImageSwitcher; 
import android.widget.ImageView; 
import android.widget.AdapterView.OnItemSelectedListener; 
import android.widget.Gallery.LayoutParams; 
import android.widget.ViewSwitcher.ViewFactory; 
 
public class MainActivity extends Activity implements OnItemSelectedListener, 
    ViewFactory { 
   
  private ImageSwitcher mSwitcher; 
  //             
  private Integer[] mThumbIds = { R.drawable.sample_thumb_0, 
      R.drawable.sample_thumb_1, R.drawable.sample_thumb_2, 
      R.drawable.sample_thumb_3, R.drawable.sample_thumb_4, 
      R.drawable.sample_thumb_5, R.drawable.sample_thumb_6, 
      R.drawable.sample_thumb_7 }; 
  //       
  private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4, 
      R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 }; 
 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    //        
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 
    mSwitcher = (ImageSwitcher) findViewById(R.id.switcher); 
    //       ImageSwitcher  , 
    //     setFactory  ,  setImageResource           。 
    mSwitcher.setFactory(this); 
    //       
    mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, 
        android.R.anim.fade_in)); 
    mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, 
        android.R.anim.fade_out)); 
 
    Gallery g = (Gallery) findViewById(R.id.gallery); 
     
    //  OnItemSelectedListener    
    g.setAdapter(new ImageAdapter(this)); 
    g.setOnItemSelectedListener(this); 
 
  } 
  //     ImageAdapter 
  public class ImageAdapter extends BaseAdapter { 
    public ImageAdapter(Context c) { 
      mContext = c; 
    } 
    public int getCount() { 
      return mThumbIds.length; 
    } 
    public Object getItem(int position) { 
      return position; 
    } 
    public long getItemId(int position) { 
      return position; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
      ImageView i = new ImageView(mContext); 
 
      i.setImageResource(mThumbIds[position]); 
      //       
      i.setAdjustViewBounds(true); 
      //       
      i.setLayoutParams(new Gallery.LayoutParams( 
          LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
      //       
      i.setBackgroundResource(R.drawable.picture_frame); 
      return i; 
    } 
    private Context mContext; 
  } 
 
  @Override 
  //  onItemSelected()  ,     
  public void onItemSelected(AdapterView<?> adapter, View v, int position, 
      long id) { 
    //       
    mSwitcher.setImageResource(mImageIds[position]); 
  } 
 
  @Override 
  public void onNothingSelected(AdapterView<?> arg0) { 
 
  } 
 
  @Override 
  //  makeView()  , ImageView       
  public View makeView() { 
    ImageView i = new ImageView(this); 
    //       
    i.setBackgroundColor(0xFF000000); 
    //       
    i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
    //       
    i.setLayoutParams(new ImageSwitcher.LayoutParams( 
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 
    return i; 
  } 
}
main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent" 
  >   
  <ImageSwitcher  
    android:id="@+id/switcher" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    />   
  <Gallery 
    android:id="@+id/gallery" 
    android:background="#55000000" 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:gravity="center_vertical" 
    android:spacing="16dp" 
    /> 
</RelativeLayout>
효과 그림:

2.GridView 의 소개
GridView(격자 보기)는 행렬 의 방식 에 따라 내용 을 표시 하 는데 보통 그림,그림 등 내용 을 표시 하 는 데 사용 된다.예 를 들 어 구 궁 격 도 를 실현 하려 면 GridView 를 사용 하 는 것 이 가장 좋 고 가장 간단 하 다.어댑터 설정 에 주로 사 용 됩 니 다.
GridView 에서 자주 사용 하 는 XML 속성:
속성 이름
묘사 하 다.
android:columnWidth
열의 폭 을 설정 합 니 다.
android:gravity
이 구성 요소 의 내용 이 구성 요소 에 있 는 위 치 를 설정 합 니 다.선택 할 수 있 는 값 은 top,bottom,left,right,center 입 니 다.vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical 은 많이 선택 할 수 있 습 니 다."|"로 나 눌 수 있 습 니 다.
android:horizontalSpacing
두 열 사이 의 간격.
android:numColumns
열 수 를 설정 하 다.
android:stretchMode
크기 조정 모드.
android:verticalSpacing
두 줄 사이 의 간격.
다음은 세 가지 예 가 있 습 니 다.첫 번 째 는 그림 만 표시 하고 두 번 째 는 그림 문 자 를 표시 하 는 것 입 니 다.(이곳 의 그림 은 Android 시스템 이 자체 적 으로 가지 고 있 는 그림 입 니 다)세 번 째 는 사용자 정의 그림 문 자 를 표시 하 는 것 입 니 다.앞의 두 사례 의 실현 은 어렵 지 않다.세 번 째 사례 의 실현 은 복잡 하 다.GridView 를 공부 할 때 자신 이 좋아 하 는 그림 과 문 자 를 사용자 정의 할 수 있 는 지,인터넷 에서 자 료 를 찾 을 수 있 는 지,보통 두 번 째 사례 의 형식 이다.마지막 으로 영상 학습 에서 자신의 그림 을 사용자 정의 할 수 있 는 예 를 찾 았 다.스스로 예 에 따라 공부 하여 세 번 째 예 로 수정 하 였 다.
첫 번 째 예:
MainActivity.java

package com.android.gridview.activity; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    GridView gv = (GridView)findViewById(R.id.GridView1); 
    // GridView      
    gv.setAdapter(new MyAdapter(this)); 
    //       
    gv.setOnItemClickListener(new OnItemClickListener() 
    { 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
      { 
        Toast.makeText(MainActivity.this, "pic" + position, Toast.LENGTH_SHORT).show(); 
      } 
    }); 
  } 
} 
  //       
  class MyAdapter extends BaseAdapter{ 
    //      
    private Context context; 
    //     
    private Integer[] imgs = { 
        R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,  
        R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,         
        R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,  
        R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,  
        R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,         
        R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, 
    }; 
    MyAdapter(Context context){ 
      this.context = context; 
    } 
    public int getCount() { 
      return imgs.length; 
    } 
 
    public Object getItem(int item) { 
      return item; 
    } 
 
    public long getItemId(int id) { 
      return id; 
    } 
     
    //  View   
    public View getView(int position, View convertView, ViewGroup parent) { 
       ImageView imageView; 
        if (convertView == null) { 
          imageView = new ImageView(context); 
          imageView.setLayoutParams(new GridView.LayoutParams(75, 75));//  ImageView     
          imageView.setAdjustViewBounds(false);//       
          imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//        
          imageView.setPadding(8, 8, 8, 8);//     
        }  
        else { 
          imageView = (ImageView) convertView; 
        } 
        imageView.setImageResource(imgs[position]);// ImageView       
        return imageView; 
    } 
} 
main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  > 
  <GridView  
    android:id="@+id/GridView1"  
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content" 
    android:columnWidth="90dp" 
    android:numColumns="3" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center"     
    /> 
</LinearLayout>
효과 그림:

두 번 째 예:
MainActivity.java

package com.android.gridview2.activity; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.GridView; 
import android.widget.SimpleAdapter; 
 
public class MainActivity extends Activity { 
 
    private GridView gv; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.gridview); 
 
     //           
     List<Map<String, Object>> items = new ArrayList<Map<String,Object>>(); 
     for (int i = 0; i < 9; i++) { 
      Map<String, Object> item = new HashMap<String, Object>(); 
      item.put("imageItem", R.drawable.icon);//       ID  
      item.put("textItem", "icon" + i);//     ItemText  
      items.add(item); 
     } 
 
     //         
     SimpleAdapter adapter = new SimpleAdapter(this,  
                           items,  
                           R.layout.grid_item,  
                           new String[]{"imageItem", "textItem"},  
                           new int[]{R.id.image_item, R.id.text_item}); 
 
     //  GridView   
     gv = (GridView)findViewById(R.id.mygridview); 
     // GridView      
     gv.setAdapter(adapter); 
 
    } 
} 
gridview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content" 
  > 
  <GridView  
   android:id="@+id/mygridview" 
   android:numColumns="3" 
   android:gravity="center_horizontal" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:stretchMode="columnWidth" 
   /> 
</LinearLayout> 
grid_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/RelativeLayout1" 
  android:layout_width="wrap_content"  
  android:layout_height="fill_parent" 
  android:paddingBottom="6dip" 
  > 
  <ImageView  
   android:id="@+id/image_item" 
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:layout_centerHorizontal="true" 
   /> 
  <TextView  
   android:id="@+id/text_item" 
   android:layout_below="@+id/image_item" 
   android:layout_height="wrap_content" 
   android:layout_width="wrap_content" 
   android:layout_centerHorizontal="true"   
   /> 
</RelativeLayout> 
효과 그림:

세 번 째 예:
MainActivity.java

package com.android.gridview3; 
 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 
 
public class MainActivity extends Activity 
{ 
  private GridView gridView; 
  //        
  private String[] titles = new String[] 
  { "pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"}; 
  //  ID   
  private int[] images = new int[]{     
      R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,  
      R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,  
      R.drawable.pic7, R.drawable.pic8,R.drawable.pic9  
  }; 
 
  @Override 
  public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    gridView = (GridView) findViewById(R.id.gridview); 
    PictureAdapter adapter = new PictureAdapter(titles, images, this); 
    gridView.setAdapter(adapter); 
 
    gridView.setOnItemClickListener(new OnItemClickListener() 
      { 
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
        { 
          Toast.makeText(MainActivity.this, "pic" + (position+1), Toast.LENGTH_SHORT).show(); 
        } 
      }); 
  } 
} 
//       
class PictureAdapter extends BaseAdapter{ 
  private LayoutInflater inflater; 
  private List<Picture> pictures; 
 
  public PictureAdapter(String[] titles, int[] images, Context context) 
  { 
    super(); 
    pictures = new ArrayList<Picture>(); 
    inflater = LayoutInflater.from(context); 
    for (int i = 0; i < images.length; i++) 
    { 
      Picture picture = new Picture(titles[i], images[i]); 
      pictures.add(picture); 
    } 
  } 
 
  @Override 
  public int getCount() 
  { 
    if (null != pictures) 
    { 
      return pictures.size(); 
    } else 
    { 
      return 0; 
    } 
  } 
 
  @Override 
  public Object getItem(int position) 
  { 
    return pictures.get(position); 
  } 
 
  @Override 
  public long getItemId(int position) 
  { 
    return position; 
  } 
 
  @Override 
  public View getView(int position, View convertView, ViewGroup parent) 
  { 
    ViewHolder viewHolder; 
    if (convertView == null) 
    { 
      convertView = inflater.inflate(R.layout.picture_item, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.title = (TextView) convertView.findViewById(R.id.title); 
      viewHolder.image = (ImageView) convertView.findViewById(R.id.image); 
      convertView.setTag(viewHolder); 
    } else 
    { 
      viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    viewHolder.title.setText(pictures.get(position).getTitle()); 
    viewHolder.image.setImageResource(pictures.get(position).getImageId()); 
    return convertView; 
  } 
 
} 
 
class ViewHolder 
{ 
  public TextView title; 
  public ImageView image; 
} 
 
class Picture 
{ 
  private String title; 
  private int imageId; 
 
  public Picture() 
  { 
    super(); 
  } 
 
  public Picture(String title, int imageId) 
  { 
    super(); 
    this.title = title; 
    this.imageId = imageId; 
  } 
 
  public String getTitle() 
  { 
    return title; 
  } 
 
  public void setTitle(String title) 
  { 
    this.title = title; 
  } 
 
  public int getImageId() 
  { 
    return imageId; 
  } 
 
  public void setImageId(int imageId) 
  { 
    this.imageId = imageId; 
  } 
} 
main.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android"  
  android:id="@+id/gridview" 
  android:layout_width="fill_parent"  
  android:layout_height="fill_parent" 
  android:columnWidth="90dp" 
  android:numColumns="auto_fit" 
  android:verticalSpacing="10dp" 
  android:horizontalSpacing="10dp" 
  android:stretchMode="columnWidth" 
  android:gravity="center" 
  />
picture_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
  xmlns:android="http://schemas.android.com/apk/res/android" 
  android:id="@+id/root" 
  android:orientation="vertical"  
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"  
  android:layout_marginTop="5dp" 
  > 
  <ImageView  
    android:id="@+id/image" 
    android:layout_width="100dp" 
    android:layout_height="150dp"  
    android:layout_gravity="center" 
    android:scaleType="fitXY" 
    android:padding="4dp" 
    /> 
  <TextView  
    android:id="@+id/title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"  
    android:layout_gravity="center" 
    android:gravity="center_horizontal" 
    /> 
</LinearLayout> 
효과 그림:

본문 은'IT 의 소소 한'블 로그 에서 나 온 것 이다.

좋은 웹페이지 즐겨찾기