您的位置:首页 > 其它

Gesture 通过手势实现翻书效果

2016-06-27 22:54 351 查看
package com.test.gesturetest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;

/**
* 通过手势实现翻书效果
*/
public class GestureFlipActivity extends AppCompatActivity implements GestureDetector.OnGestureListener {
GestureDetector mDetector;
ViewFlipper mFlipper;

//定义一个动画数组用于为 ViewFlipper指定切换动画效果
Animation[] anims = new Animation[4];
//定义两个手势动作两点之间的最小距离
int FLIP_DISTANCE = 50;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gesture_flip);

mDetector = new GestureDetector(this, this);

mFlipper = (ViewFlipper) findViewById(R.id.flipper);

//为ViewFlipper 添加几个 ImageView组件
mFlipper.addView(aaddImageView(R.drawable.ajax));
mFlipper.addView(aaddImageView(R.drawable.classic));
mFlipper.addView(aaddImageView(R.drawable.ee));
mFlipper.addView(aaddImageView(R.drawable.flower));
mFlipper.addView(aaddImageView(R.drawable.java));
mFlipper.addView(aaddImageView(R.drawable.lijiang));
mFlipper.addView(aaddImageView(R.drawable.xml));

//初始化动画数组
anims[0] = AnimationUtils.loadAnimation(this, R.anim.left_in); //左进
anims[1] = AnimationUtils.loadAnimation(this, R.anim.left_out); //左出
anims[2] = AnimationUtils.loadAnimation(this, R.anim.right_in); //右进
anims[3] = AnimationUtils.loadAnimation(this, R.anim.right_out); //右出
}

//定义 添加Imageiew的工具方法
public View aaddImageView(int resId) {

ImageView imageView = new ImageView(this);
imageView.setImageResource(resId);
imageView.setScaleType(ImageView.ScaleType.CENTER);

return imageView;
}

//重写该方法就是要把 activity的触屏事件交给 GestureDetector 处理
@Override
public boolean onTouchEvent(MotionEvent event) {
return mDetector.onTouchEvent(event);
}

@Override
public boolean onDown(MotionEvent e) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

//如果第一个触点事件的X坐标 大于第2个触点事件的y坐标 超过 FLIP_DISTANCE
if (e1.getX() - e2.getX() > FLIP_DISTANCE) {
mFlipper.setInAnimation(anims[0]);
mFlipper.setOutAnimation(anims[1]);

mFlipper.showPrevious();
return true;
}

//如果第2个触点x坐标 大于 第1个触点坐标 超过 FLIP_DISTANCE
else if (e2.getX() - e1.getX() > FLIP_DISTANCE) {
mFlipper.setInAnimation(anims[2]);
mFlipper.setOutAnimation(anims[3]);
mFlipper.showNext();
return true;
}

return false;
}
}


布局界面

<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.test.gesturetest.GestureZoomActivity">
<ImageView
android:id="@+id/show"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="center"
/>
</RelativeLayout>


 动画资源

左进 动画

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="100%p"
android:toXDelta="0"
/>
<alpha
android:duration="500"
android:fromAlpha="0.1"
android:toAlpha="1"/>

</set>


左出

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


右进

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


右出

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="500"
android:fromXDelta="0"
android:toXDelta="100%p"/>
<alpha
android:duration="500"
android:fromAlpha="0.1"
android:toAlpha="1.0"/>
</set>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: