Android实现上下滑动效果Word格式.docx

上传人:b****6 文档编号:18872352 上传时间:2023-01-01 格式:DOCX 页数:28 大小:126.94KB
下载 相关 举报
Android实现上下滑动效果Word格式.docx_第1页
第1页 / 共28页
Android实现上下滑动效果Word格式.docx_第2页
第2页 / 共28页
Android实现上下滑动效果Word格式.docx_第3页
第3页 / 共28页
Android实现上下滑动效果Word格式.docx_第4页
第4页 / 共28页
Android实现上下滑动效果Word格式.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

Android实现上下滑动效果Word格式.docx

《Android实现上下滑动效果Word格式.docx》由会员分享,可在线阅读,更多相关《Android实现上下滑动效果Word格式.docx(28页珍藏版)》请在冰豆网上搜索。

Android实现上下滑动效果Word格式.docx

detector;

protected 

void 

onCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

flipper 

new 

ViewFlipper(this);

detector 

GestureDetector(this);

LinearLayoutlin= 

LinearLayout(this);

lin.setLayoutParams(newLinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT));

lin.setOrientation(LinearLayout.VERTICAL);

addTxt(lin);

this.addContentView(lin, 

ViewGroup.LayoutParams(200,200));

}

addTxt(ViewGroupview)

{

TextViewtxt1= 

TextView(this);

txt1.setLayoutParams(new 

LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

txt1.setText("

11"

);

 

...txt2和txt3一样设定

flipper.addView(txt1);

flipper.addView(txt2);

flipper.addView(txt3);

view.addView(flipper);

/**

重写GestureDeterctor类里面的onTouchEvent方法

*/

boolean 

onTouchEvent(MotionEventevent){

Log.i("

golf"

"

onTouch"

return 

this.detector.onTouchEvent(event);

.....

onFling(MotionEvente1,MotionEvente2, 

float 

velocityX,

velocityY){

if 

(e1.getY()>

e2.getY()) 

this.flipper.showNext();

else 

(e1.getY()<

this.flipper.showPrevious();

else

false;

true;

这里面用到了两个对象,ViewFlipper和GestureDetector。

我们先说说这ViewFilpper继承自FrameLayout、类似于一个容器,它有一个优点每次只能显示一个view,利用这个优点,我们可以实现类似的翻页的效果。

事先要把View都添加到ViewFlipper中去,代码如下:

txt1.setLayoutParams(new 

//添加到viewFlipper中

效果图:

滚动之后

分析:

我们先从简单的入手,在一个activity中实现滚动,不要再弹出来的dialog中实现这个滚动效果。

要想实现滚动效果,必须实现android.view.GestureDetector包中的OnGestureListener接口,这个接口里面有六个要实现的方法onDown(MotionEvente)、onShowPress(MotionEvente)、onSingleTapup(MotionEvente)、onScroll(MotionEvente1,MotionEvente2,floatdistance,floatdistanceY)、onLongPress(MotionEvente)、

velocityX, 

velocity)

我们所要做的事就是重写onTouchEvent放,通过GestureDetector对象获取触摸的类型,可能是按下、长时间按下、滑动等、就是对应的6个方法。

下面是重写的onTouchEvent方法:

System.out.println("

这里面的变量detector在onCreate中实例化。

由于我们是滑动的效果,所以只要重写onFling(MotionEvente1,MotionEvente2, 

floatvelocity)方法

参数说明:

(我的理解)

第一个参数:

事件源的起始点

第二个参数:

事件源的终点

第三个参数:

水平方向滑动的距离

第四个参数:

垂直方向滑动的距离。

下面是重写的onFling(MotionEvente1,MotionEvente2, 

velocity)方法。

floatvelocityX,

onFling"

e2.getY())

flipper.showNext();

flipper.showPrevious();

其他的六个方法比较简单,通过system.out.println()方法看看什么时候调用这个方法。

3. 

升华

接下来我们想将这个activity以dialog的形式在其他的activity中显示。

先回忆一下我们dialog是如何创建的:

Dialog 

dialog 

newAlertDialog.Builder(this).setView(flipper).create();

setView(Viewview)这个参数很灵活。

但是自己尝试了各种方法想在dialog实现这种翻页的效果,但是都是失败的。

那我们就通过视觉上的欺骗的方法来实现跳出来像dialog的activity。

我们新建一个MainActivity,放一个button添加onclickListener事件。

事件中的代码:

Intent 

intent= 

Intent();

intent.setClass(this,Weight.class);

startActivity(intent);

这样跳转肯定是跳转到新的activity中了,如何实现视觉上的欺骗呢?

只需要在申明这个activity中,给Weight添加一个属性:

代码如下:

<

activity 

android:

name="

.Weight"

label="

@string/app_name"

theme="

@android:

style/Theme.Dialog"

>

/activity>

Android:

theme=”@android:

style/Theme.Dialog”这个属性就会让Weight乖乖的像dialog一样显示了.

用户手势检测-GestureDetector使用详解

2014-09-2411:

16 

26470人阅读 

评论(13) 

收藏 

举报

分类:

5、andriod开发(145) 

版权声明:

本文为博主原创文章,未经博主允许不得转载。

目录(?

)[+]

前言:

今天终于可以正常上班了,阿里的百技真的真的太累了,作为队长,不仅要考虑到每一个人的感受,而且要最大程度地使大家团结起来,共同完成一个任务,四天的时间,14个人的小组完成一个系统,我们队最终是第一个完成的,他们真的很厉害,周六周日都还在加班做,我真的很感动,今天有些同学要坐飞机回京了,很不舍,一周的并肩奋战,使我们一生在一起,小伙伴们,来日再聚!

一、概述

当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等。

一般情况下,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Viewv,MotionEventevent)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,用这个接口就会很麻烦(因为我们要自己根据用户触摸的轨迹去判断是什么手势)。

Android 

sdk给我们提供了GestureDetector(Gesture:

手势Detector:

识别)类,通过这个类我们可以识别很多的手势,主要是通过他的onTouchEvent(event)方法完成了不同手势的识别。

虽然他能识别手势,但是不同的手势要怎么处理,应该是提供给程序员实现的。

GestureDetector这个类对外提供了两个接口和一个外部类

接口:

OnGestureListener,OnDoubleTapListener

内部类:

SimpleOnGestureListener

这个外部类,其实是两个接口中所有函数的集成,它包含了这两个接口里所有必须要实现的函数而且都已经重写,但所有方法体都是空的;

不同点在于:

该类是staticclass,程序员可以在外部继承这个类,重写里面的手势处理方法。

下面我们先看OnGestureListener接口;

二、GestureDetector.OnGestureListener---接口

1、基本讲解

如果我们写一个类并implementsOnGestureListener,会提示有几个必须重写的函数,加上之后是这个样子的:

[java] 

viewplain 

copy

1.private 

gesturelistener 

GestureDetector.OnGestureListener{ 

onDown(MotionEvent 

e) 

4. 

// 

TODO 

Auto-generated 

method 

stub 

5. 

6. 

7. 

8. 

onShowPress(MotionEvent 

9. 

10. 

11. 

12. 

13. 

onSingleTapUp(MotionEvent 

14. 

15. 

16. 

17. 

18. 

onScroll(MotionEvent 

e1, 

MotionEvent 

e2, 

19. 

distanceX, 

distanceY) 

20. 

21. 

22. 

23. 

24. 

onLongPress(MotionEvent 

25. 

26. 

27. 

28. 

29. 

onFling(MotionEvent 

30. 

velocityY) 

31. 

32. 

33. 

34. 

35.} 

可见,这里总共重写了六个函数,这些函数都在什么情况下才会触发呢,下面讲一下:

OnDown(MotionEvente):

用户按下屏幕就会触发;

onShowPress(MotionEvente):

如果是按下的时间超过瞬间,而且在按下的时候没有松开或者是拖动的,那么onShowPress就会执行,具体这个瞬间是多久,我也不清楚呃……

onLongPress(MotionEvente):

长按触摸屏,超过一定时长,就会触发这个事件

触发顺序:

onDown->

onShowPress->

onLongPress

onSingleTapUp(MotionEvente):

从名子也可以看出,一次单独的轻击抬起操作,也就是轻击一下屏幕,立刻抬起来,才会有这个触发,当然,如果除了Down以外还有其它操作,那就不再算是Single操作了,所以也就不会触发这个事件

触发顺序:

点击一下非常快的(不滑动)Touchup:

onDown->

onSingleTapUp->

onSingleTapConfirmed 

点击一下稍微慢点的(不滑动)Touchup:

onSingleTapConfirmed

onFling(MotionEvente1,MotionEvente2,floatvelocityX,floatvelocityY):

滑屏,用户按下触摸屏、快速移动后松开,由1个MotionEventACTION_DOWN,多个ACTION_MOVE,1个ACTION_UP触发 

参数解释:

e1:

第1个ACTION_DOWNMotionEvent

e2:

最后一个ACTION_MOVEMotionEvent

velocityX:

X轴上的移动速度,像素/秒

velocityY:

Y轴上的移动速度,像素/秒 

onScroll(MotionEvente1,MotionEvente2,floatdistanceX,floatdistanceY):

在屏幕上拖动事件。

无论是用手拖动view,或者是以抛的动作滚动,都会多次触发,这个方法 

在ACTION_MOVE动作发生时就会触发

滑屏:

手指触动屏幕后,稍微滑动后立即松开

onDown-----》onScroll----》onScroll----》onScroll----》………----->

onFling

拖动

onDown------》onScroll----》onScroll------》onFiling

可见,无论是滑屏,还是拖动,影响的只是中间OnScroll触发的数量多少而已,最终都会触发onFling事件!

2、实例

要使用GestureDetector,有三步要走:

1、创建OnGestureListener监听函数:

可以使用构造实例:

1.GestureDetector.OnGestureListener 

listener 

GestureDetector.OnGestureListener(){ 

};

也可以构造类:

gestureListener 

3.} 

2、创建GestureDetector实例mGestureDetector:

构造函数有下面三个,根据需要选择:

1.GestureDetector 

gestureDetector=new 

GestureDetector(GestureDetector.OnGestureListener 

listener);

2.GestureDetector 

GestureDetector(Context 

context,GestureDetector.OnGestureListener 

3.GestureDetector 

context,GestureDetector.SimpleOnGestureListener 

3、onTouch(Viewv,MotionEventevent)中拦截:

1.public 

onTouch(View 

v, 

event) 

mGestureDetector.onTouchEvent(event);

4、控件绑定

1.TextView 

tv 

(TextView)findViewById(R.id.tv);

2.tv.setOnTouchListener(this);

现在进入实例阶段:

首先,在主布局页面添加一个textView,并将其放大到整屏,方便在其上的手势识别,代码为:

1.<

RelativeLayout 

xmlns:

android="

tools="

layout_width="

match_parent"

layout_height="

tools:

context="

com.example.gesturedetectorinterface.MainActivity"

TextView 

id="

@+id/tv"

fill_parent"

layout_margin="

50dip"

background="

#ff00ff"

text="

@string/hello_world"

/>

15.<

/RelativeLayout>

然后在JAVA代码中,依据上面的三步走原则,写出代码,并在所有的手势下添加上Toast提示并写上Log

view

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1