通过Gallery和ImageSwitcher制作图片浏览

此文,仅做为个人学习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) {

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值