要想实现如iPhone一样的Gallery画廊,能拖动相片的特效,需要用到包括:android.content.Context, android.widget.BaseAdapter , android.widget.ImageView等,这些通常会用在设计相册、图片类型的选择器上。
在开始之前,必须先了解什么叫做Context以及widget里的BaseAdapter,在Activity当中,Context就如同是一张Canvas画布,随时等着被处理或重写。
本范例在Layout里布局一个Gallery对象,再通过widget.BaseAdapter容器存放Gallery所需要的图片,源码如下:
Activity_main.xml:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Gallery
android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"/>
</LinearLayout>
MainActivity.java
package com.example.test01;
import android.app.Activity;
importandroid.content.Context;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.Gallery;
importandroid.widget.ImageView;
public class MainActivityextends Activity {
private Gallery gallery;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gallery = (Gallery)findViewById(R.id.gallery);
gallery.setAdapter(new ImageAdapter(this));
}
public class ImageAdapter extends BaseAdapter
{
private Context context;
//使用图片作为图库资源,类型为整数数组
private int[] imageIds = {R.drawable.psu1 ,R.drawable.psu2 , R.drawable.psu3 ,R.drawable.a1 ,
R.drawable.a2 , R.drawable.a3 ,R.drawable.a4 , R.drawable.a5 , R.drawable.a6 ,
R.drawable.a7 , R.drawable.a8 ,R.drawable.a9 , R.drawable.a10 , R.drawable.a11 ,
R.drawable.a12 , R.drawable.a13 ,R.drawable.a14 , R.drawable.a15};
//构造器只有一个参数,即要存储的Context
public ImageAdapter(Context c){this.context = c;}
public int getCount() {return this.imageIds.length;}
public Object getItem(int position) {return position;}
public long getItemId(int position) {return position;}
//取得目前欲显示的图像View,传入数组ID值使之读取与成像
public View getView(int position, View convertView,ViewGroup parent)
{
ImageView imageView = new ImageView(context);
imageView.setImageResource(imageIds[position]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//设置这个ImageView对象的宽高,单位为dip
// imageView.setLayoutParams(newGallery.LayoutParams(La, 400));
return imageView;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action barif it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}