这个大家都有过体会,就是当你左右拖动的时候,能够做到向左向右翻页。代码我写了很详细的注释。包括xml的注释,所以就不怎么解释了。先测试下代码高亮能用不.我当前用的是WP-Syntax插件。将就着还行吧。如果你知道更好的话。不妨给我推荐一下。
package com.android.flip;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.ViewFlipper;
/**
* Android实现左右滑动效果
* @author byStander
*
*/
public class MainActivity extends Activity implements OnGestureListener { //实现了手势监听类
private ViewFlipper flipper; //切换的类。可以实现多个view之间的切换,也可以说设置间隔时间自动切换
private GestureDetector detector; //相应手势请求的类。包括触摸
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
detector = new GestureDetector(this); //以手势监听类来初始化它
flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper1);
//以下是设置内部的view。调用自写函数
flipper.addView(addTextView(R.drawable.one));
flipper.addView(addTextView(R.drawable.two));
flipper.addView(addTextView(R.drawable.three));
flipper.addView(addTextView(R.drawable.four));
flipper.addView(addTextView(R.drawable.five));
}
//以id为参数设置图片view
private View addTextView(int id) {
ImageView iv = new ImageView(this); //参数是上下文
iv.setImageResource(id);
return iv;
}
//当触摸事件没有被处理的时候调用此。
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return this.detector.onTouchEvent(event);
}
//当手指按下的时候触发。所有的其他时间都必须先调用此方法。
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if (e1.getX() - e2.getX() > 120) {//设置当翻页产生的距离大于120的时候才触发翻页效果
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
this.flipper.showNext();//设置显示下一个。
return true;
} else if (e1.getX() - e2.getX() < -120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
this.flipper.showPrevious();//否则显示前一个
return true;
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
本文参考:
1.http://www.cnblogs.com/hanyonglu/archive/2012/02/13/2349827.html
2.https://developer.android.com/resources/samples/ApiDemos/index.html 具体工程源码稍后发布。因为115网盘暂时不能分享