您的位置:首页 > 移动开发 > Android开发

Gallery画廊预览效果

2016-09-08 15:07 260 查看
实现画廊效果,并点击小图展示大图:

1.不用传统的资源获取方法,而是通过反射得到所有公有或私有的资源声明区域

//drawable的声明区域(通过反射来得到所有公有或私有的资源)
Field[] myfields = R.drawable.class.getDeclaredFields();


2.通过该区域可以得到其中每一个资源的ID

//通过区域得到里面每一个图片资源的ID(R.drawable.class)
int index = myfields[i].getInt(R.drawable.class);


3.测试证明,无论是jpg还是png的图片,凡是属于drawable的资源都可以反射出来

具体代码和页面实现:

xml部分:

<LinearLayout xmlns: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:background="#abcdef"
android:orientation="vertical"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/myImg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="2" />
<Gallery
android:id="@+id/mygallery"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:spacing="10dp" />
</LinearLayout>


MainActivity:

public class MainActivity extends Activity implements OnItemClickListener {
private ImageView myImg;//大图
private Gallery mygallery;//画廊
private ImageAdapter imageAdapter;//适配器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myImg = (ImageView)findViewById(R.id.myImg);
mygallery = (Gallery)findViewById(R.id.mygallery);
imageAdapter = new ImageAdapter(this);
mygallery.setAdapter(imageAdapter);
mygallery.setOnItemClickListener(this);
}

private class ImageAdapter extends BaseAdapter{
private Context mContext;
//ID资源集合
private ArrayList<Integer> myImgList = new ArrayList<Integer>();
private ArrayList<Object> myImgSize = new ArrayList<Object>();

public ImageAdapter(Context mContext) {
super();
this.mContext = mContext;
try {
//drawable的声明区域(通过反射来得到所有公有或私有的资源) Field[] myfields = R.drawable.class.getDeclaredFields();
for(int i=0;i<myfields.length;i++){
//通过区域得到里面每一个图片资源的ID(R.drawable.class) int index = myfields[i].getInt(R.drawable.class);
myImgList.add(index);

Bitmap bmImg = BitmapFactory.decodeResource(getResources(), index);
int size[] = new int[2];//声明数组,指定长度,保存每张图片的宽、高
size[0] = bmImg.getWidth();
size[1] = bmImg.getHeight();
myImgSize.add(size);//数组对象保存到集合中
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public int getCount() {
return myImgList.size();
}
@Override
public Object getItem(int position) {
return myImgList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
//从资源集合中取value,intValue()方法把Integer类型转成int类型
imageView.setImageResource(myImgList.get(position).intValue());
imageView.setScaleType(imageView.getScaleType().FIT_XY);

int size[] = new int[2];
size = (int[])myImgSize.get(position);
imageView.setLayoutParams(new Gallery.LayoutParams(size[0],size[1]));

return imageView;
}
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setTitle(String.valueOf(arg2+1));
myImg.setImageResource(imageAdapter.myImgList.get(arg2).intValue());
}

}


以上就是全部代码,大家可以自个去试试,有什么问题可以留言。或者在微信公众号“技术帮团队”上找我们。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  画廊 android 列表