Android 개발 학습 노트 Gallery 와 GridView 에 대한 분석
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 의 소소 한'블 로그 에서 나 온 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
easy uigridview 효과 구현포그라운드 태스크: 백그라운드:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.