• Android画廊控件之Gallery


    Gallery:用来显示图片列表。可以左右拖动。

    如图:

    图片取自http://www.cnblogs.com/menlsh/archive/2013/02/26/2934434.html

    在Gallery属性标签中,android:spacing="2dp"属性用于指定Gallery列表图片之间的间隔为2dp。

    Gallery只是作为一个画廊,放上图片还需有图片框。即需要一个容器。

    ImageAdapter适配器

    我们自己写一个名为ImageAdapter的类继承BaseAdapter

    并重写以下四个方法:

    (1)public int getCount();//获取图片的个数

    (2)public Object getItem(int arg0);//获取arg0位置的图片

    (3)public long getItemId(int arg0);//获取图片位置

    (4)public View getView(int arg0, View arg1, ViewGroup arg2);//获取适配器中指定位置的视图对象

    代码如下: 

    package com.example.hualang;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.Gallery;
    import android.widget.ImageView;
    
    public class ImageAdapter extends BaseAdapter {
    
    	private Context mcontext;
    	public ImageAdapter(Context c)
    	{
    		this.mcontext=c;
    	}
    	private int[] imageIds={R.drawable.doupo,R.drawable.grzx,R.drawable.gwc,R.drawable.haizeiwang,R.drawable.huoying};
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return imageIds.length;
    	}
    
    	@Override
    	public Object getItem(int arg0) {
    		// TODO Auto-generated method stub
    		return arg0;
    	}
    
    	@Override
    	public long getItemId(int arg0) {
    		// TODO Auto-generated method stub
    		return arg0;
    	}
    
    	@Override
    	public View getView(int arg0, View arg1, ViewGroup arg2) {
    		// TODO Auto-generated method stub
    		ImageView i=new ImageView(this.mcontext);
    		i.setImageResource(this.imageIds[arg0]);//用于将ImageAdapter中的指定位置图片资源加载到
    		i.setLayoutParams(new Gallery.LayoutParams(180,180));
    		 i.setScaleType(ImageView.ScaleType.FIT_CENTER);//用于设置imageView中图片的缩放显示格式。
    		return i;
    	}
    
    }
    

    MainActivity只需在onCreate()方法加上((Gallery)findViewById(R.id.gallery)).setAdapter(new ImageAdapter(this));

    ImageView的scaletype属性

    ImageView.ScaleType|android:scaleType值的意义:

    ImageView.ScaleType.CENTER|android:scaleType="center" 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

    ImageView.ScaleType.CENTER_CROP|android:scaleType="centerCrop" 按比例扩大图片的size居中显示,使得图片长 (宽)等于或大于View的长(宽)

    ImageView.ScaleType.CENTER_INSIDE|android:scaleType="centerInside" 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长(宽)等于或小于View的长(宽)

    ImageView.ScaleType.FIT_CENTER|android:scaleType="fitCenter" 把图片按比例扩大(缩小)到View的宽度,居中显示

    ImageView.ScaleType.FIT_END|android:scaleType="fitEnd" 把图片按比例扩大(缩小)到View的宽度,显示在View的下部分位置

    ImageView.ScaleType.FIT_START|android:scaleType="fitStart把图片按比例扩大(缩小)到View的宽度,显示在View的上部分位置

    ImageView.ScaleType.FIT_XY|android:scaleType="fitXY" 把图片按照指定的大小在View中显示

    ImageView.ScaleType.MATRIX|android:scaleType="matrix" 用matrix来绘制

    若想实现这种效果:

    只需为Gallery加上监听器

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
    // TODO Auto-generated method stub
      mimageview.setBackgroundResource(i.imageIds[arg2]);
    }

    以为个人将ImageView单独开一个文件导致下面的问题,若存放在同一个文件下则可直接使用。

    使用监听器要获得图片id时,若直接使用mimageview.setBackgroundResource(imageIds[arg2]);imageIds无法被识别。则采取ImageAdapter i=new ImageAdapter(this);用i来得到ImageView类里面的图片资源id。以下是源码:

    package com.example.hualang;
    import com.example.hualang.ImageAdapter;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Gallery;
    import android.widget.ImageView;
    import android.widget.TextView;
    public class MainActivity extends Activity {
    
        private ImageView mimageview=null;
        ImageAdapter i=new ImageAdapter(this);
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            Gallery mgallery=((Gallery)findViewById(R.id.gallery));
            mimageview=(ImageView)findViewById(R.id.mimageView);
            mgallery.setAdapter(i);
            mgallery.setOnItemClickListener(new OnItemClickListener() {
                
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    mimageview.setBackgroundResource(i.imageIds[arg2]);
                }
            });
            
        }
    }

    当然也可采取将图片资源id数组配置到xml文件中,再获得。

  • 相关阅读:
    ARM9嵌入式学习日志--20170828
    技术积累
    做产品还是做技术?
    python学习之一
    他山之石——面试非技术问题整理(持续更新中)
    他山之石——面试技术问题整理(持续更新中)
    .bss .text和.data简介
    linux学习——大话linux网络
    实用的技术网站
    linux学习——centos minimal安装vim
  • 原文地址:https://www.cnblogs.com/hsshy/p/4751234.html
Copyright © 2020-2023  润新知