搞到了Gallery ,shit!!!!
Gallery画廊,感觉上就是有个条,上面可以布满图片,恩,就是这么easy~
先看效果图~
是的,没有任何处理的效果就是这样,功能就是如此简单~
首先是写主activity.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:windowBackground"
/>
在onCreate 的setContentView(R.layout.activity_main);时调用。
从这里可以看出,Gallery只不过是一种图片布局方式罢了,虽然可以嵌套,不过也就是那么回事儿,内部还是需要添加ImageView来进行填充图片的。
图片的xml文件;
<RelativeLayout 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"
>
<ImageView
android:id="@+id/image_a"
android:layout_width="100dp"
android:layout_height="100dp"
android:scaleType="centerCrop"
android:background="#ABCDEF"
/>
</RelativeLayout>
使用了两种形式不同的方式显示填充图片:
第一种方式;
使用BaseAdapter与tag来填充,目的是防止重绘,有些已经在ListView的BaseAdapter中介绍了,这里使用了Holder作为Tag的结构体类。、
package com.example.gallay;
import com.example.gallay.R.layout;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
public class MainActivity extends Activity {
@SuppressWarnings("deprecation")
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));
}
}
// 设置结构体类
class Holder{
ImageView image;
}
class ImageAdapter extends BaseAdapter{
private Holder holder;
private LayoutInflater minflater ;
//声明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,
R.drawable.pic8,
R.drawable.pic9
};
//声明 ImageAdapter
public ImageAdapter(Context c){
this.minflater=LayoutInflater.from(c); // 得到布局
}
@Override
//获取图片的个数
public int getCount() {
return imageInteger.length;
}
@Override
//获取图片在库中的位置
public Object getItem(int position) {
return position;
}
@Override
//获取图片在库中的位置
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView==null)
{
convertView=minflater.inflate(R.layout.image, null);//逐行布局
// 设置参数
holder = new Holder();
holder.image=(ImageView)convertView.findViewById(R.id.image_a);
convertView.setTag(holder);
}
else
{
holder= (Holder) convertView.getTag();
}
holder.image.setBackgroundResource(imageInteger[position]);
return convertView;
}
}
第二种方式没有用到imga.xml,只是用到了Galler的xml,但在baseAdapter内部对图片布局进行了定义。
替换ImageAdapter类即可
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,
R.drawable.pic8,
R.drawable.pic9
};
//声明 ImageAdapter
public ImageAdapter(Context c){
context = c;
}
@Override
//获取图片的个数
public int getCount() {
return imageInteger.length;
}
@Override
//获取图片在库中的位置
public Object getItem(int position) {
System.out.println("postion: "+ position);
return position;
}
@Override
//获取图片在库中的位置
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// System.out.println("positio_getView : "+ position);
// System.out.println("ConvertView :"+ convertView);
// System.out.println("ViewGroup :"+parent);
ImageView imageView = new ImageView(context);
//给ImageView设置资源
imageView.setImageResource(imageInteger[position]);
//设置比例类型
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setBackgroundColor(256);
//设置布局 图片128x192显示
imageView.setLayoutParams(new Gallery.LayoutParams(128, 128));
return imageView;
}
}
我觉得还是第一种方式比较稳妥,可以在代码中直接加入其它文字信息,如果需要触发事件,在OnCreate中调用setOnItemSelectedListener即可。
哎,坑爹~