Android组件学习: 掌握ImageSwitcher的使用方法

问题咨询及项目源码下载请加群:

群名:IT项目交流群

群号:245022761

 

【实验目的】
    1.掌握ImageSwitcher的使用方法。
【实验原理】
ImageSwitcher是一个图片切换器,它间接继承自FrameLayout类,和ImageView相比,多了一个功能,那就是它在显示的图片切换时,可以设置动画效果,类似于淡进淡出效果,以及左进右出滑动等效果。
图像切换器使用ImageSwitcher表示,用于实现类似于Windows操作系统下的“Windows照片查看器”中的上一张、下一张切换图片的功能。
在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法创建用于显示图片的ImageView对象。makeView()方法将返回一个显示图片的ImageView。在使用ImageSwitcher组件时,还有一个非常重要的方法,那就是setImageResource()方法,此方法用于指定在ImageSwitcher中显示的图片资源。

效果展示:

Android组件学习: 掌握ImageSwitcher的使用方法

【实验内容】

图1
【实验目标】
    ImageSwitcher实现,通过滑动在多张图片之间的切换。

【练习步骤】
1.创建新项目
先建立一个空项目,如MyimageSwitcher项目,然后进行以下修改。
2.资源建设
(1)图片
从网上下载图片,存放在res/drawable目录下,文件名称分别为img01.jpg、img02.jpg、img03.jpg、img04.jpg。
    Android编译时,会给这些文件一个ID,ID的名称为R.drawable.XXX,XXX是文件名称,例为:R.drawable.img01。
(2)动画
    在res目录下,创建anim目录,在此目录下,定义动画的资源文件。定义动画的属性说明如下:
属    性    描    述
android:interpolator    用于控制动画的变化速度,使得动画效果可以匀速、加速、减速或抛物线速度等各种速度变化 
android:fromXDelta    用于指定动画开始时水平方向上的起始位置
android:toXDelta    用于指定动画结束时水平方向上的起始位置
android:fromYDelta    用于指定动画开始时垂直方向上的起始位置
android:toYDelta    用于指定动画结束时垂直方向上的起始位置
android:repeatMode    用于设置动画的重复方式,可选值为reverse(反向)或restart(重新开始)
android:repeatCount    用于设置动画的重复次数,属性可以是代表次数的数值,也可以是infinite(无限循环)
android:duration    用于指定动画持续的时间,单位为毫秒
注意:
在这些属性里面还可以加上%和p,例如: 
android:toXDelta=”100%”,表示自身的100%,也就是从View自己的位置开始。 
android:toXDelta=”80%p”,表示父层View的80%,是以它父层View为参照的。

Slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="-100%p"
    android:toXDelta="0"
    android:duration="1000"/>
</set>

Slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromXDelta="100%p"
        android:toXDelta="0"/>
</set>

Slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromXDelta="0"
        android:toXDelta="-100%p"/>
</set>

Slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromXDelta="0"
        android:toXDelta="100%p"/>
</set>


3.设置主布局文件
    修改主布局文件activity_main.xml,在其中添加ImageSwitcher控件,并设置其相关属性,具体内容如下。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.myimageswitcher.MainActivity">

    <!--图像切换器-->
    <ImageSwitcher
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_centerVertical="true"
        android:id="@+id/imageswitcher">
    </ImageSwitcher>
</RelativeLayout>

4.编写代码
    具体代码如下。
package com.example.myimageswitcher;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.ViewSwitcher;

public class MainActivity extends AppCompatActivity {

    private int[] arrayPictures = new int[]{R.drawable.img01, R.drawable.img02, R.drawable.img03,
            R.drawable.img04, R.drawable.img05, R.drawable.img06,
            R.drawable.img07, R.drawable.img08, R.drawable.img09,
    };// 声明并初始化一个保存要显示图像ID的数组
    private ImageSwitcher imageSwitcher; // 声明一个图像切换器对象
    //要显示的图片在图片数组中的Index
    private int pictutureIndex;
    //左右滑动时手指按下的X坐标
    private float touchDownX;
    //左右滑动时手指松开的X坐标
    private float 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.imageswitcher); // 获取图像切换器
        //为ImageSwicher设置Factory,用来为ImageSwicher制造ImageView
        imageSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(MainActivity.this); // 实例化一个ImageView类的对象
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT));
                imageView.setImageResource(arrayPictures[pictutureIndex]);//根据id加载默认显示图片
                return imageView; // 返回imageView对象
            }
        });
        imageSwitcher.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    //取得左右滑动时手指按下的X坐标
                    touchDownX = event.getX();
                    return true;
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    //取得左右滑动时手指松开的X坐标
                    touchUpX = event.getX();
                    //从左往右,看下一张
                    if (touchUpX - touchDownX > 100) {
                        //取得当前要看的图片的index
                        pictutureIndex = pictutureIndex == 0 ? arrayPictures.length - 1 : pictutureIndex - 1;
                        //设置图片切换的动画
                        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_in_left));
                        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_out_right));
                        //设置当前要看的图片
                        imageSwitcher.setImageResource(arrayPictures[pictutureIndex]);
                        //从右往左,看上一张
                    } else if (touchDownX - touchUpX > 100) {
                        //取得当前要看的图片index
                        pictutureIndex = pictutureIndex == arrayPictures.length - 1 ? 0 : pictutureIndex + 1;
                        //设置切换动画
                        imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_out_left));
                        imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.slide_in_right));
                        //设置要看的图片
                        imageSwitcher.setImageResource(arrayPictures[pictutureIndex]);
                    }
                    return true;
                }
                return false;
            }
        });
    }
}

5.验证效果
运行,便会出现如图1的效果。

1.51单片机学习整理

 

基于51单片机的智能光控路灯 :https://download.****.net/download/qq_37037348/11071869

基于51单片机超声波测距(内含源程序,原理图及PCB源文件):https://download.****.net/download/qq_37037348/11071866

 

 

基于51单片机的智能安防报警系统:https://download.****.net/download/qq_37037348/11071865

 

基于51单片机模块化编程模块 (红外、液晶显示屏、温湿度等传感器模块化)

:https://download.****.net/download/qq_37037348/11053222

 

基于51单片机pwm控制的呼吸灯程序

https://download.****.net/download/qq_37037348/11053195

 

51单片机与上位机串口通信实例包含详细讲解的完整代码

https://download.****.net/download/qq_37037348/11053164

 

 

基于51单片机的直交流电压表仿真 (详细代码实现,设计讲解)

https://download.****.net/download/qq_37037348/11053145

 

 

 

基于51单片机胸牌 详细代码实现,设计讲解)

https://download.****.net/download/qq_37037348/11053125

 

基于51单片机3x4按键拨号 (详细代码实现,设计讲解)

https://download.****.net/download/qq_37037348/11053093

 

 

基于51单片机拨号 (详细代码实现,设计讲解)

 

https://download.****.net/download/qq_37037348/11053090

 

 

基于51单片机警灯系统设计(详细代码实现,设计讲解)

https://download.****.net/download/qq_37037348/11053086

 

 

基于51单片机点亮一个小灯(详细代码实现,设计讲解,学习51基础实验)

https://download.****.net/download/qq_37037348/11053084

 

基于51单片机开发的排球计时器,附有详细注释讲解,为大家提供最真心的帮助

https://download.****.net/download/qq_37037348/11053024

 

 

基于51单片机的音乐播放器,源码详细注释

https://download.****.net/download/qq_37037348/11053022

 

 

 

2.Android 开发学习整理:

 

Android-serialport 手机App串口通信代码实现:

 

https://download.****.net/download/qq_37037348/11050521

 

Android-serialport 手机App网络通信实例代码实现:

https://download.****.net/download/qq_37037348/11050516

 

Android 第一个App详细教程、基础实验 :

https://download.****.net/download/qq_37037348/11050515

 

 

3.计算机视觉(深度学习、神经网络的学习)

 

feature extraction(深度学习,特征提取,神经网络:https://download.****.net/download/qq_37037348/11065968

 

feature extraction(深度学习,特征提取,神经网络多种训练模型详细实现):

https://download.****.net/download/qq_37037348/11065974

 

 

 

欢迎大家加入学习项目交流,为大家分享各类个人学习项目及学习资料,互相交流互相学习。

Android组件学习: 掌握ImageSwitcher的使用方法