ImageSwitcher和GridView的案例开发

Posted xiaofengzai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageSwitcher和GridView的案例开发相关的知识,希望对你有一定的参考价值。

(一)ImageSwitcher之手机相册的滑动查看

首先在布局文件上加一个ImageSwitcher,设置它的宽度和高度为match_parent.

在主程序中:首先设置一个存储照片资源的数组,在设置一个index下标,和一个touchDownX和一个touchUpX.

在onCreat方法里首先设置了一个全屏显示,获取imageSwitcher变量,然后设置setFactory, 在makeView里首先获取一个ImageView对象,设置它的ImageResourse为index,返回imageView对象。

在设置一个触摸监听器,根据动作来获取他的坐标,根据坐标相减,来设置index,进而设置ImageResourse。

主程序代码:

package com.example.imageswitcherandgridview;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageButton;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;

public class MainActivity extends AppCompatActivity {
    private Integer[] arrayPicture = {
            R.drawable.img01, R.drawable.img02, R.drawable.img03, R.drawable.img04,
            R.drawable.img05, R.drawable.img06, R.drawable.img07, R.drawable.img08
    };
    private ImageSwitcher imageSwitcher;
    private int index;
    private float touchDownX, touchUpX;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏显示
        imageSwitcher = (ImageSwitcher) findViewById(R.id.imgSwitcher);
        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(MainActivity.this);
                imageView.setImageResource(arrayPicture[index]);
                return imageView;
            }
        });
        imageSwitcher.setOnTouchListener(imgtouch);
    }

    private View.OnTouchListener imgtouch = new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                touchDownX = event.getX();
                return true;
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                touchUpX = event.getX();
                if (touchUpX - touchDownX > 100) {
                    index = index == 0 ? arrayPicture.length - 1 : index - 1;
                    imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_in));
                    imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_out));
                    imageSwitcher.setImageResource(arrayPicture[index]);
                } else if (touchDownX - touchUpX > 100) {
                    index = index == arrayPicture.length - 1 ? 0 : index + 1;
                    imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_in));
                    imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this,android.R.anim.fade_out));
                    imageSwitcher.setImageResource(arrayPicture[index]);
                }
                return true;
            }
            return false;
        }
    };
}

(二)网格视图GridView

①制作网格视图:使用的适配器是SimpleAdapter

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:numColumns="auto_fit" />
</androidx.constraintlayout.widget.ConstraintLayout>

主程序文件:

package com.example.gridview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.GridView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private Integer[] picture={
            R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,
            R.drawable.img06
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView gridView=(GridView)findViewById(R.id.gridview);
        List<Map<String,Object>> listitem=new ArrayList<Map<String,Object>>();
        for(int i=0;i<picture.length;i++)
        {
            Map<String,Object> map=new HashMap<String,Object>();
            map.put("image",picture[i]);
            listitem.add(map);
        }
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,listitem,R.layout.cell,new String[]{"image"},new int[]{R.id.image});
        gridView.setAdapter(simpleAdapter);
    }
}

图片cell.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:id="@+id/image"
        android:layout_width="200dp"
        android:layout_height="150dp" />
</LinearLayout>

截图:

技术图片

 

 

②使用BaseAdapter适配器

主程序文件:

package com.example.gridview;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridLayout;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private Integer[] picture={
            R.drawable.img01,R.drawable.img02,R.drawable.img03,R.drawable.img04,R.drawable.img05,
            R.drawable.img06
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GridView gridView=(GridView)findViewById(R.id.gridview);
        gridView.setAdapter(new ImageAdapter(this));
    }
    public class ImageAdapter extends BaseAdapter{
        private Context mContext;
        public ImageAdapter(Context c){
            mContext=c;
        }

        @Override
        public int getCount() {
            return picture.length;
        }

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

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if(convertView==null)
            {
                imageView=new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(400,250));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            }else
            {
                imageView=(ImageView)convertView;
            }
            imageView.setImageResource(picture[position]);
            return imageView;
        }
    }
}

程序截图:

技术图片

 

 

以上是关于ImageSwitcher和GridView的案例开发的主要内容,如果未能解决你的问题,请参考以下文章

基于图像切换器(imageSwitcher)的支持动画的图片浏览器

Android零基础入门第55节:ImageSwitcher和TextSwitcher使用

android的ImageSwitcher和TextSwitcher

Android Gallery和ImageSwitcher同步自动(滚动)播放图片库

Android攻城狮Gallery和ImageSwitcher制作图片浏览器

图片切换器(ImageSwitcher)的功能与用法