Android控件之Gallery

搞到了Gallery ,shit!!!!

Gallery画廊,感觉上就是有个条,上面可以布满图片,恩,就是这么easy~

先看效果图~

Android控件之Gallery_第1张图片

是的,没有任何处理的效果就是这样,功能就是如此简单~

首先是写主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即可。

哎,坑爹~


你可能感兴趣的:(android,控件)