关于ViewFlipper的使用
来源:互联网 发布:windows徽标键与t 编辑:程序博客网 时间:2024/06/01 07:40
上篇 谢了 Fragment的切换效果为 翻牌效果, 这次描述一下使用ViewFlipper来实现翻牌的切换效果
在Xml文件中声明一个ViewFlipper。
<ViewFlipper android:id="@+id/viewFlipper" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <include android:id="@+id/viewflipper1" layout="@layout/viewflipper_item1"/> <include android:id="@+id/viewflipper2" layout="@layout/viewflipper_item2"/></ViewFlipper>
将想要切换的布局放入到ViewFlipper中。通过 <include layout="@layout/viewflipper_item2"/>方式
用到的补间动画的方式来进行切换。翻牌效果需要重写 x,y,z三个轴的旋转。所以需要自定义一个animation动画类来重写这些方法。
public class Rotate3dAnimation extends Animation {
private final float mFromDegrees; / /从什么角度开始
private final float mToDegrees; / / 翻转到哪个角度
private final float mCenterX; / / 以centerX为X轴旋转
private final float mCenterY; / / 以centerY为Y轴旋转
private final float mDepthZ; / / 以DepthZ为 Z轴旋转
private final boolean mReverse;
private Camera mCamera;
/**
* 在构造方法中对数据进行初始化。
*/
public Rotate3dAnimation(float fromDegrees, float toDegrees,
float centerX, float centerY, float depthZ, boolean reverse) {
mFromDegrees = fromDegrees;
mToDegrees = toDegrees;
mCenterX = centerX;
mCenterY = centerY;
mDepthZ = depthZ;
mReverse = reverse;
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
mCamera = new Camera();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final float fromDegrees = mFromDegrees;
float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
final float centerX = mCenterX;
final float centerY = mCenterY;
final Camera camera = mCamera;
final Matrix matrix = t.getMatrix();
camera.save();
if (mReverse) {
camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime);
} else {
camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime));
}
camera.rotateY(degrees);
camera.getMatrix(matrix);
camera.restore();
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
}
}
通过点击事件来 进行布局切换
private boolean checked=true;
public void change(View view) {
float halfWidth = viewFlipper.getWidth() / 2.0f;
float halfHeight = viewFlipper.getHeight() / 2.0f;
int duration = 500;
int depthz = 0;//viewFlipper.getWidth()/2;
if (checked) {
checked=false;
//进入时的动作,与上一个x方向相反
Rotate3dAnimation in = new Rotate3dAnimation(-90, 0, halfWidth, halfHeight, depthz, false);
in.setDuration(duration);
in.setStartOffset(duration);
/ / 给ViewFlipper设置进入动画效果
viewFlipper.setInAnimation(in);
//退出时的动画。
Rotate3dAnimation out = new Rotate3dAnimation(0, 90, halfWidth, halfHeight, depthz, false);
out.setDuration(duration);
/ / 给ViewFlipper设置退出动画效果
viewFlipper.setOutAnimation(out);
viewFlipper.showNext();
} else {
checked=true;
//进入时的动作,与上一个x方向相反
Rotate3dAnimation in = new Rotate3dAnimation(90, 0, halfWidth, halfHeight, depthz, false);
in.setDuration(duration);
in.setStartOffset(duration);
/ / 给ViewFlipper设置进入动画效果
viewFlipper.setInAnimation(in);
//退出时的动画。
Rotate3dAnimation out = new Rotate3dAnimation(0, -90, halfWidth, halfHeight, depthz, false);
out.setDuration(duration);
/ / 给ViewFlipper设置退出动画效果
viewFlipper.setOutAnimation(out);
viewFlipper.showPrevious();
}
}
完工。
- 关于ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- android ViewFlipper的使用
- ViewFlipper的使用
- android ViewFlipper的使用
- ViewFlipper的使用
- android ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- ViewFlipper的使用
- android ViewFlipper的使用
- Android消息机制源码分析--Lopper,Handler,Message
- 系统调用
- 开发自动化运维管理平台
- linux下sh脚本的一个小问题#!/bin/sh^M不是一个file的错误
- Linux下、sudoers的权限被更改后,不能sudo的解决办法
- 关于ViewFlipper的使用
- 使用Spock框架进行单元测试
- leveldb代码阅读(15)——内存中的数据结构Memtable/SkipList
- Redis数据备份与恢复
- 字典转为Json字符串
- coursera Machine learning Andrew NG 笔记(一)
- 《偏向锁,轻量级锁,重量级锁》优缺点对比
- BasicNameValuePair的简单使用
- 以下是unix的命令行,供参考 ios