Android触屏滑动事件总结.docx
- 文档编号:27176924
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:14
- 大小:16.74KB
Android触屏滑动事件总结.docx
《Android触屏滑动事件总结.docx》由会员分享,可在线阅读,更多相关《Android触屏滑动事件总结.docx(14页珍藏版)》请在冰豆网上搜索。
Android触屏滑动事件总结
Android触屏滑动事件总结
屏幕切换指的是在同一个Activity内屏幕见的切换。
通过GestureDetector、OnGestureListener实现滑屏事件。
ViewFlipper是继承至FrameLayout的,所以它是一个Layout里面可以放置多个View。
示例中第一页仅放了一个按钮BUTTON,向下滑屏时,每页都只放了一个TEXTVIEW。
页面:
viewplaincopytoclipboardprint?
<?
xmlversion="1.0"
encoding="utf-8"?
>
<LinearLayoutxmlns:
Android="
android:
orientation="vertical"
android:
layout_width="fill_parent"
android:
layout_height="fill_parent"
>
<ViewFlipper
android:
id="@+id/ViewFlipper01"
android:
layout_width="fill_parent"
android:
layout_height="fill_parent">
</ViewFlipper>
</LinearLayout>
Activity代码:
viewplaincopytoclipboardprint?
package
com.yfz;
importandroid.app.Activity;
import
android.os.Bundle;
importandroid.util.Log;
import
android.view.GestureDetector;
import
android.view.MotionEvent;
importandroid.view.View;
import
android.view.GestureDetector.OnGestureListener;
import
android.view.ViewGroup.LayoutParams;
import
android.view.animation.AnimationUtils;
import
android.widget.Button;
import
android.widget.ExpandableListView;
import
android.widget.TextView;
import
android.widget.ViewFlipper;
publicclassFlipextendsActivity
implementsOnGestureListener
{
private
GestureDetectordetector;
privateViewFlipper
flipper;
@Override
publicvoid
onCreate(BundlesavedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
flipper=(ViewFlipper)
this.findViewById(R.id.ViewFlipper01);
flipper.addView(addButtonByText("按钮"),newLayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
detector=newGestureDetector(this);
}
publicView
addButtonByText(String
text){
Buttonbtn=new
Button(this);
btn.setText(text);
returnbtn;
}
publicViewaddTextByText(String
text){
TextViewtv=new
TextView(this);
tv.setText(text);
tv.setGravity
(1);
returntv;
}
@Override
publicbooleanonTouchEvent(MotionEvent
event){
Log.i("Fling",
"ActivityonTouchEvent!
");
returnthis.detector.onTouchEvent(event);
}
@Override
public
booleanonDown(MotionEvente)
{
//TODOAuto-generated
methodstub
return
false;
}
@Override
public
booleanonFling(MotionEvente1,MotionEvente2,float
velocityX,
floatvelocityY){
//TODO
Auto-generatedmethodstub
Log.i("Fling","Fling
Happened!
");
if(e1.getX()-
e2.getX()>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.addView(addTextByText("文本框"),newLayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
this.flipper.showNext();
returntrue;
}elseif
(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();
returntrue;
}
return
true;
}
@Override
publicvoidonLongPress(MotionEvente)
{
//TODOAuto-generated
method
stub
}
@Override
public
booleanonScroll(MotionEvente1,MotionEvente2,float
distanceX,
floatdistanceY){
//TODO
Auto-generatedmethodstub
returnfalse;
}
@Override
publicvoidonShowPress(MotionEvente)
{
//TODOAuto-generated
method
stub
}
@Override
public
booleanonSingleTapUp(MotionEvente)
{
//TODOAuto-generated
methodstub
return
false;
}
}
这里实现的功能是从右往左滑动则切换到上一个View,从左往右滑动则切换到下一个View,并且使用不同的in、out动画使切换效果看起来统一一些。
滑屏实现:
通过android.view.GestureDetector类可以检测各种手势事件,该类有两个回调接口分别用来通知具体的事件:
GestureDetector.OnDoubleTapListener:
用来通知DoubleTap事件,类似于鼠标的双击事件,该接口有如下三个回调函数:
1.onDoubleTap(MotionEvent
e):
通知DoubleTap手势,
2.onDoubleTapEvent(MotionEvente):
通知DoubleTap手势中的事件,包含down、up和move事件(这里指的是在双击之间发生的事件,例如在同一个地方双击会产生DoubleTap手势,而在DoubleTap手势里面还会发生down和up事件,这两个事件由该函数通知);
3.onSingleTapConfirmed(MotionEvent
e):
用来判定该次点击是SingleTap而不是DoubleTap,如果连续点击两次就是DoubleTap手势,如果只点击一次,系统等待一段时间后没有收到第二次点击则判定该次点击为SingleTap而不是DoubleTap,然后触发SingleTapConfirmed事件。
GestureDetector.OnGestureListener:
用来通知普通的手势事件,该接口有如下六个回调函数:
1.onDown(MotionEvente):
down事件;
2.onSingleTapUp(MotionEvente):
一次点击up事件;
3.onShowPress(MotionEvente):
down事件发生而move或则up还没发生前触发该事件;
4.onLongPress(MotionEvente):
长按事件;
5.onFling(MotionEvente1,MotionEvente2,
floatvelocityX,floatvelocityY):
滑动手势事件;
6.onScroll(MotionEvente1,MotionEvente2,
floatdistanceX,floatdistanceY):
在屏幕上拖动事件。
本次仅用到了OnGestureListener类中的onFling方法。
其他手势事件各位可以自己回去试验。
简单说明:
要实现屏幕切换的话,首先需要定义一个GestureDetector:
privateGestureDetector
mGestureDetector;
并在onCreate函数中初始化:
mGestureDetector=new
GestureDetector(this);
同时Activity要继承OnGestureListener接口,并实现其中的onFling方法。
另外Activity的onTouchEvent事件也要实现!
!
另外本例View切换时还有动画效果。
使用Animation类实现,相关的函数:
setInAnimation:
设置View进入屏幕时候使用的动画,该函数有两个版本:
一个接受单个参数,类型为android.view.animation.Animation;
一个接受两个参数,类型为Context和int,分别为Context对象和定义Animation的resourceID。
setOutAnimation:
设置View退出屏幕时候使用的动画,参数setInAnimation函数一样。
showNext:
调用该函数来显示FrameLayout里面的下一个View。
showPrevious:
调用该函数来显示FrameLayout里面的上一个View。
动画源文件:
(在res目录下,创建一个anim文件夹,把下面的文件都放在这里)
push_left_in.xml
viewplaincopytoclipboardprint?
<?
xmlversion="1.0"
encoding="utf-8"?
>
<setxmlns:
android="
<translateandroid:
fromXDelta="100%p"
android:
toXDelta="0"
android:
duration="500"/>
<alpha
android:
fromAlpha="0.1"
android:
toAlpha="1.0"
android:
duration="500"/>
</set>
push_left_out.xml:
viewplaincopytoclipboardprint?
<?
xmlversion="1.0"
encoding="utf-8"?
>
<setxmlns:
android="
<translateandroid:
fromXDelta="0"
android:
toXDelta="-100%p"
android:
duration="500"/>
<alpha
android:
fromAlpha="1.0"
android:
toAlpha="0.1"
android:
duration="500"/>
</set>
push_right_in.xml:
viewplaincopytoclipboardprint?
<?
xmlversion="1.0"
encoding="utf-8"?
>
<setxmlns:
android="
<translateandroid:
fromXDelta="-100%p"
android:
toXDelta="0"
android:
duration="500"/>
<alpha
android:
fromAlpha="0.1"
android:
toAlpha="1.0"
android:
duration="500"/>
</set>
push_right_out.xml:
viewplaincopytoclipboardprint?
<?
xmlversion="1.0"
encoding="utf-8"?
>
<setxmlns:
android="
<translateandroid:
fromXDelta="0"
android:
toXDelta="100%p"
android:
duration="500"/>
<alpha
android:
fromAlpha="1.0"
android:
toAlpha="0.1"
android:
duration="500"/>
</set>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 滑动 事件 总结
![提示](https://static.bdocx.com/images/bang_tan.gif)