gallery

发布时间 2023-06-18 03:43:37作者: 洛殊

1 布局文件 activity_main

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:textSize="20dp"/>
    <Gallery
        android:id="@+id/gallery"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:spacing="10dp"/>
    <ImageSwitcher
        android:id="@+id/imageSwitcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</TableLayout>

2 控制文件 MainActivity

package com.example.gallery;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
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.ViewSwitcher;


public class MainActivity extends AppCompatActivity {
    ImageSwitcher imageSwitcher;
    Gallery gallery;
    int[] imps ={R.drawable.img1,
            R.drawable.img2,
            R.drawable.img3,
            R.drawable.img4,
            R.drawable.img5,
            R.drawable.img6,
            R.drawable.img7,
            R.drawable.img8};


    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        imageSwitcher=findViewById(R.id.imageSwitcher);
        imageSwitcher.setFactory(new viewFactory());
        //淡入淡出效果
        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in));
        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out));
        //设置初始照片
        imageSwitcher.setImageResource(R.drawable.img1);

        gallery=findViewById(R.id.gallery);
        gallery.setOnItemSelectedListener(new OnItemSelectedListener());
        gallery.setSpacing(10);
        gallery.setAdapter(new baseAdapter());
    }

    class viewFactory implements ViewSwitcher.ViewFactory {
        @Override
        public View makeView() {
            ImageView imageView=new ImageView(MainActivity.this);
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            return imageView;
        }
    }


    //获取选择的gallery中的图片
    private class OnItemSelectedListener implements AdapterView.OnItemSelectedListener {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            imageSwitcher.setImageResource((int)gallery.getItemIdAtPosition(position));
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {}
    }

    //设置适配器,安排gallery显示
    private class baseAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return imps.length;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return imps[position];
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView  imageView=new ImageView(MainActivity.this);
            imageView.setImageResource(imps[position]);
            //ImageView 控件的缩放类型为 "FIT_CENTER"等比例缩放
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            imageView.setLayoutParams(new Gallery.LayoutParams(300,300));
            return imageView;
        }
    }
}