问题咨询及项目源码下载请加群:
群名:IT项目交流群
群号:245022761
【实验目的】
1.掌握ImageSwitcher的使用方法。
【实验原理】
ImageSwitcher是一个图片切换器,它间接继承自FrameLayout类,和ImageView相比,多了一个功能,那就是它在显示的图片切换时,可以设置动画效果,类似于淡进淡出效果,以及左进右出滑动等效果。
图像切换器使用ImageSwitcher表示,用于实现类似于Windows操作系统下的“Windows照片查看器”中的上一张、下一张切换图片的功能。
在使用ImageSwitcher时,必须实现ViewSwitcher.ViewFactory接口,并通过makeView()方法创建用于显示图片的ImageView对象。makeView()方法将返回一个显示图片的ImageView。在使用ImageSwitcher组件时,还有一个非常重要的方法,那就是setImageResource()方法,此方法用于指定在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.csdn.net/download/qq_37037348/11071869
基于51单片机超声波测距(内含源程序,原理图及PCB源文件):https://download.csdn.net/download/qq_37037348/11071866
基于51单片机的智能安防报警系统:https://download.csdn.net/download/qq_37037348/11071865
基于51单片机模块化编程模块 (红外、液晶显示屏、温湿度等传感器模块化)
:https://download.csdn.net/download/qq_37037348/11053222
基于51单片机pwm控制的呼吸灯程序
https://download.csdn.net/download/qq_37037348/11053195
51单片机与上位机串口通信实例包含详细讲解的完整代码
https://download.csdn.net/download/qq_37037348/11053164
基于51单片机的直交流电压表仿真 (详细代码实现,设计讲解)
https://download.csdn.net/download/qq_37037348/11053145
基于51单片机胸牌 详细代码实现,设计讲解)
https://download.csdn.net/download/qq_37037348/11053125
基于51单片机3x4按键拨号 (详细代码实现,设计讲解)
https://download.csdn.net/download/qq_37037348/11053093
基于51单片机拨号 (详细代码实现,设计讲解)
https://download.csdn.net/download/qq_37037348/11053090
基于51单片机警灯系统设计(详细代码实现,设计讲解)
https://download.csdn.net/download/qq_37037348/11053086
基于51单片机点亮一个小灯(详细代码实现,设计讲解,学习51基础实验)
https://download.csdn.net/download/qq_37037348/11053084
基于51单片机开发的排球计时器,附有详细注释讲解,为大家提供最真心的帮助
https://download.csdn.net/download/qq_37037348/11053024
基于51单片机的音乐播放器,源码详细注释
https://download.csdn.net/download/qq_37037348/11053022
2.Android 开发学习整理:
Android-serialport 手机App串口通信代码实现:
https://download.csdn.net/download/qq_37037348/11050521
Android-serialport 手机App网络通信实例代码实现:
https://download.csdn.net/download/qq_37037348/11050516
Android 第一个App详细教程、基础实验 :
https://download.csdn.net/download/qq_37037348/11050515
3.计算机视觉(深度学习、神经网络的学习)
feature extraction(深度学习,特征提取,神经网络:https://download.csdn.net/download/qq_37037348/11065968
feature extraction(深度学习,特征提取,神经网络多种训练模型详细实现):
https://download.csdn.net/download/qq_37037348/11065974
欢迎大家加入学习项目交流,为大家分享各类个人学习项目及学习资料,互相交流互相学习。