随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)
ViewFlipper经常和Animation结合使用,实现滑动屏幕切换图片的动画效果,直接上代码:
MainActivity:
package com.home.viewflippertest;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;
import android.app.Activity;
public class MainActivity extends Activity {
private GestureDetector detector;
private ViewFlipper flipper;
private int index = 1;// 当前位置
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
flipper = (ViewFlipper) findViewById(R.id.main_vf);
detector = new GestureDetector(this, new MyGestureListener());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return detector.onTouchEvent(event);
}
class MyGestureListener implements OnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > 5) {
flipper.setInAnimation(AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_in_left));
flipper.setOutAnimation(AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_out_left));
if (index < 5) {
flipper.showNext();
index++;
}
} else if (e1.getX() - e2.getX() < -5) {
flipper.setInAnimation(AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_in_right));
flipper.setOutAnimation(AnimationUtils.loadAnimation(
MainActivity.this, R.anim.push_out_right));
if (index > 1) {
flipper.showPrevious();
index--;
}
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
}
}
main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ViewFlipper
android:id="@+id/main_vf"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:flipInterval="100"
android:inAnimation="@anim/push_in_left"
android:outAnimation="@anim/push_out_left"
android:persistentDrawingCache="animation" >
<ImageView
android:id="@+id/main_iv_test1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test1" />
<ImageView
android:id="@+id/main_iv_test2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test2" />
<ImageView
android:id="@+id/main_iv_test3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test3" />
<ImageView
android:id="@+id/main_iv_test4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test4" />
<ImageView
android:id="@+id/main_iv_test5"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test5" />
</ViewFlipper>
</LinearLayout>
动画系列:
push_in_left.xml:
<?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>
push_out_left.xml:
<?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="1.0"
android:toAlpha="0.1" />
</set>
push_in_right.xml:
<?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>
push_out_right.xml:
<?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="1.0"
android:toAlpha="0.1" />
</set>