Android中Gallery常用功能2----幻燈片效果,加入切換動畫

1效果圖:

項目結構:

這個是用 ImageSwitcher 和 Gallery 實現的,

https://blog.csdn.net/zhaihaohao1/article/details/100169211

我們使用的時 ImageView,ImageView 大圖切換的時候,沒有動畫效果,看起來有些生硬,

在這裏把ImageView換成ImageSwitcher ,ImageSwitcher 可以顯示切換動畫
ViewPager也能實現類似效果,所以放到ViewPager的分類中

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/layout1"
    android:gravity="center_horizontal"
    >
    <ImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="30px"
        android:layout_gravity="center_horizontal"
        />

    <Gallery
        android:id="@+id/gallery1"
        android:spacing="5px"
        android:unselectedAlpha="0.3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        />

</LinearLayout>
MainActivity中
package com.zhh.test;

import android.app.Activity;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ViewSwitcher;

public class MainActivity extends Activity {
    //定義並初始化保存圖片id的數組
    private int[] imageId=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,
            R.drawable.img5,R.drawable.img6,R.drawable.img7,R.drawable.img8,R.drawable.img9,R.drawable.img10};
    //聲明一個圖像切換器對象
    private ImageSwitcher imageSwitcher;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Gallery gallery=(Gallery)findViewById(R.id.gallery1);//獲取gallery組件

        imageSwitcher=(ImageSwitcher)findViewById(R.id.imageSwitcher);//獲取圖像切換器

        //設置動畫效果
        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));//設置淡入動畫
        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));//設置淡出動畫

        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory(){


            @Override
            public View makeView() {
                ImageView imageView=new ImageView(MainActivity.this);//實例化一個imageView類的對象
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);//設置保持縱橫比居中縮放圖像
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(500,400));
                return imageView;//返回imageView對象
            }
        });

        MyAdapter myAdapter = new MyAdapter(MainActivity.this,imageId);
        gallery.setAdapter(myAdapter);//將適配器與Gallery關聯

        gallery.setSelection(imageId.length/2);//選中中間的圖片
        gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View v,
        int position, long id) {
            imageSwitcher.setImageResource(imageId[position]);//顯示選中的圖片
        }


        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub
        }
    });
}
}

MyAdapter中
package com.zhh.test;

import android.content.Context;
import android.content.res.TypedArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;

/**
 * 綁定圖片的適配器
 */
public class MyAdapter extends BaseAdapter {
    private Context context;
    private int[] imageId;
    public MyAdapter(Context context,int[] imageId){
        this.context = context;
        this.imageId = imageId;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;//聲明ImageView的對象
        if(convertView==null){
            imageView=new ImageView(context);//實例化ImageView的對象
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);//設置縮放方式
            imageView.setLayoutParams(new Gallery.LayoutParams(180,135));
            //設置gallery每一項圖片的背景資源(使用的是attr.xml的自定義樣式)
            TypedArray typedArray=context.obtainStyledAttributes(R.styleable.Gallery);
            imageView.setBackgroundResource(typedArray.getResourceId(
                    R.styleable.Gallery_android_galleryItemBackground, 0));
            imageView.setPadding(2, 0, 2, 0);//設置imageView的內邊距
        }else{
            imageView=(ImageView)convertView;
        }
        imageView.setImageResource(imageId[position]);//爲imageView設置要顯示的圖片
        return imageView;//返回ImageView
    }

    //功能:獲得當前選項的id
    @Override
    public long getItemId(int position) {
        return position;
    }

    //功能:獲得當前選項
    @Override
    public Object getItem(int position) {
        return position;
    }

    //獲得數量
    @Override
    public int getCount() {
        return imageId.length;
    }
}

attr.xml.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="Gallery">
        <attr name="android:galleryItemBackground"/>
    </declare-styleable>
</resources>

全部代碼已經貼完:

參考文章:

https://blog.csdn.net/acmman/article/details/44994443

源碼下載:

https://download.csdn.net/download/zhaihaohao1/11607814

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章