此文,仅做为个人学习Android,记录成长以及方便复习!
通过Gallery实现图片的预览,使用Gallery的监听事件结合ImageSwitcher实现图片的浏览效果
首先是布局文件,放入2个组件
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Gallery
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageSwitcher
android:id="@+id/is"
android:layout_below="@+id/gallery"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</RelativeLayout>
新建一个自定义适配器,借鉴ArrayAdapter和SimpleAdaper都是继承BaseAdapter类
getCount():返回ListView需要显示的数据数量。
getItem():取出索引所对应的一个数据项。
getItemId( ):取出数据项所对应的索引。
getView():返回每一项的显示内容。
MyAdapter.java
package com.example.qqazl001.gaellerydemo;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
/**
* Created by qqazl001 on 2018-03-27.
*/
public class MyApadter extends BaseAdapter{
private int img[];//定义一个数组,图片id由此加入
private Context context;//上下文对象
//通过构造方法传入数据
public MyApadter(int[] img, Context context){
this.img = img;
this.context =context;
}
//返回个数
@Override
public int getCount() {
//为了实现无限循环,调用Integer最大值
return Integer.MAX_VALUE;
// return img.length;
}
@Override
public Object getItem(int i) {
return img[i];
}
@Override
public long getItemId(int i) {
return i;
}
//重写getView(),把图片ID(这里是res[position])转变为 ImageView,并返回 ImageView:
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ImageView image = new ImageView(context);
image.setBackgroundResource(img[i%img.length]); //无限循环读取
//设置图片(ImageView)在Gallery中的缩略图的大小
image.setLayoutParams(new Gallery.LayoutParams(400,300));
image.setScaleType(ImageView.ScaleType.FIT_XY);//设置缩放比例(scale)采取的类型
return image;
}
}
配置完适配器,只需要适当的配置和引用即可!
MainActivity.java
package com.example.qqazl001.gaellerydemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;
//继承了OnItemSelectedListener实现Gallery监听, 另外实现ViewFactory实现图片工厂
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener,ViewSwitcher.ViewFactory{
//数据源
private int img[]={R.drawable.item1,R.drawable.item2,R.drawable.item3,R.drawable.item4,R.drawable.item5,R.drawable.item6,
R.drawable.item7,R.drawable.item8,R.drawable.item9};
//声明组件
private Gallery gallery;
private ImageSwitcher is;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化Gallery
gallery = (Gallery)findViewById(R.id.gallery);
//实例化自定义适配器,并传入值
MyApadter myApadter = new MyApadter(img,MainActivity.this);
//加载适配器
gallery.setAdapter(myApadter);
//设置监听方法
gallery.setOnItemSelectedListener(this);
//实例化ImageSwitcher
is = (ImageSwitcher)findViewById(R.id.is);
//加载图片工厂的配置
is.setFactory(this);
//设置图片的切换效果为系统自带的fade_in和fade_out
is.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
is.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
}
//覆盖图片接口的方法
@Override
public View makeView() {
ImageView image = new ImageView(this);
image.setScaleType(ImageView.ScaleType.FIT_CENTER);
return image;
}
// 覆盖监听接口的方法
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
is.setBackgroundResource(img[i%img.length]);
}
//监听到整个Adapter为空时调用该方法
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
}