搞到了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; } }
替换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即可。
哎,坑爹~