Android使用ViewFlipper做页面切换,与手势滑动切换的使用
2011-09-13 09:52
537 查看
Android系统自带有一个多页面管理的控件:ViewFlipper.
它可以简单实现子页面的切换,,,
它只需使用addView方法添加几个View,每个View对应的是一个页面,即可完成对于多页面的管理,,,
在android上实现手势的识别也比较简单,可以实现OnTouchListener和OnGuestureListener接口,
然后在OnTouch函数中注册GestureDetector来判别手势动作,
参考一位大牛的文章:
http://wang-peng1.iteye.com/blog/572886
GestureDetector.OnGestureListener:用来通知普通的手势事件,该接口有如下六个回调函数:
1. onDown(MotionEvent e):down事件;
2. onSingleTapUp(MotionEvent e):一次点击up事件;
3. onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;
4. onLongPress(MotionEvent e):长按事件;
5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;
6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。
主要判断是在onFling()函数里面,e1表示开始按下去的位置信息,e2表示抬起时的位置信息,因此可以通过它们在x轴上面 的距离差来是左滑还是右滑。。。
资源文件:
代码:
还有就是一个页面切换的简单动画效果(right_out.xml),
right_in.xml
left_in.xml
left_out.xml
它可以简单实现子页面的切换,,,
它只需使用addView方法添加几个View,每个View对应的是一个页面,即可完成对于多页面的管理,,,
在android上实现手势的识别也比较简单,可以实现OnTouchListener和OnGuestureListener接口,
然后在OnTouch函数中注册GestureDetector来判别手势动作,
参考一位大牛的文章:
http://wang-peng1.iteye.com/blog/572886
GestureDetector.OnGestureListener:用来通知普通的手势事件,该接口有如下六个回调函数:
1. onDown(MotionEvent e):down事件;
2. onSingleTapUp(MotionEvent e):一次点击up事件;
3. onShowPress(MotionEvent e):down事件发生而move或则up还没发生前触发该事件;
4. onLongPress(MotionEvent e):长按事件;
5. onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滑动手势事件;
6. onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY):在屏幕上拖动事件。
主要判断是在onFling()函数里面,e1表示开始按下去的位置信息,e2表示抬起时的位置信息,因此可以通过它们在x轴上面 的距离差来是左滑还是右滑。。。
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub if (e2.getX()-e1.getX() > 100) { // fling right showNextView(); } else if (e1.getX() - e2.getX() > 100) { // fling left showPreviousView(); } return false; }
资源文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/btnPrev" android:text="Previous" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btnNext" android:text="Next" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ViewFlipper android:id="@+id/vfFlingTest" android:layout_width="fill_parent" android:layout_height="fill_parent"></ViewFlipper> </LinearLayout>
代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ViewFlipper;
public class FlingTest extends Activity implements
OnTouchListener, OnGestureListener{
private Button btnPrev;
private Button btnNext;
private ViewFlipper vfFlingTest;
private TextView tvFlipper;
private EditText etFlipper;
private ImageView ivFlipper;
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fling_test);
btnPrev = (Button)findViewById(R.id.btnPrev);
btnNext = (Button)findViewById(R.id.btnNext);
vfFlingTest = (ViewFlipper)findViewById(R.id.vfFlingTest);
initViews();
vfFlingTest.addView(tvFlipper);
vfFlingTest.addView(etFlipper);
vfFlingTest.addView(ivFlipper);
vfFlingTest.setOnTouchListener(this);
vfFlingTest.setLongClickable(true);
mGestureDetector = new GestureDetector(this);
btnPrev.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
showPreviousView();
}
});
btnNext.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
showNextView();
}
});
}
public void showPreviousView() {
vfFlingTest.setInAnimation(AnimationUtils.loadAnimation(
this, R.anim.right_in));
vfFlingTest.setOutAnimation(AnimationUtils.loadAnimation(
this, R.anim.left_out));
vfFlingTest.showPrevious();
}
public void showNextView() {
vfFlingTest.setInAnimation(AnimationUtils.loadAnimation(
this, R.anim.left_in));
vfFlingTest.setOutAnimation(AnimationUtils.loadAnimation(
this, R.anim.right_out));
vfFlingTest.showNext();
}
private void initViews() {
tvFlipper = new TextView(this);
tvFlipper.setText("this is a text view!");
etFlipper = new EditText(this);
etFlipper.setText("this is a text view!");
ivFlipper = new ImageView(this);
ivFlipper.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
ivFlipper.setImageResource(R.drawable.pic1);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
public boolean onTouch(View view, MotionEvent event) {
// TODO Auto-generated method stub
return mGestureDetector.onTouchEvent(event);
}
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // TODO Auto-generated method stub if (e2.getX()-e1.getX() > 100) { // fling right showNextView(); } else if (e1.getX() - e2.getX() > 100) { // fling left showPreviousView(); } return false; }public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
还有就是一个页面切换的简单动画效果(right_out.xml),
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="500" /> </set>
right_in.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="500" /> </set>
left_in.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="500" /> </se
left_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-100%p" android:duration="500" /> </set>
相关文章推荐
- Android使用ViewFlipper做页面切换,与手势滑动切换的使用。
- Android使用ViewFlipper做页面切换,与手势滑动切换的使用
- Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据
- Android利用ViewFlipper实现随手势滑动视图间切换
- Android中使用ViewFlipper实现屏幕页面切换(关于坐标轴的问题已补充更改)
- Android之ViewPager+Fragment实现页面点击切换和手势滑动
- Android之ViewPager+Fragment实现页面点击切换和手势滑动
- 手势检测实现相册的左右滑动(并加上移动与旋转的特效) 首先,activity_main.xml里,使用ViewFlipper组件(可使用动画控制多个组件之间的切换效果) <?xml version="
- Android中使用ViewFlipper进行手势切换实例
- android开发(8) 使用ViewFlipper来用手势切换画面
- 使用ViewFlipper实现图片自动切换,并支持手势滑动切换
- Android ViewFlipper的使用 实现页面滑动
- Android之ViewPager+Fragment实现页面点击切换和手势滑动
- 关于使用ViewFlipper实现手势滑动切换及其与ScrollView冲突的解决办法
- Android使用TabLayou+fragment+viewpager实现滑动切换页面效果
- android开发(8) 使用ViewFlipper来用手势切换画面
- Android中的手势切换——使用ViewFlipper
- Android使用ViewPager实现导航页根据情况禁止滑动以及点击切换
- Android基础入门教程——5.2.4 Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
- android ViewPager页面左右滑动切换