【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能_第1页
【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能_第2页
【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能_第3页
【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能_第4页
【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能_第5页
免费预览已结束,剩余2页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】Android中怎么实现仿iOS侧滑退出当前界面功能

在下给大家分享一下Android中怎么实现仿iOS侧滑退出当前界面功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先看下效果图:分析:(1)要想模仿ios的这种效果,因为我们通过手指的滑动,所以这里肯定跟我们的滑动事件有关系(onInterceptTouchEvent,onTouchEvent这两个方法的关系,如果不清楚,请直接查阅事件传递机制原理)(2)我们要想直接拦截我们的所有触摸事件,我们可以在上层父级布局中进行拦截和处理,这里我们想到了DecorView。首先我们应该知道Activity的顶级父View是DecorView,获取我们的DecorView也很简单getWindow().getDecorView()我们平时写的那些xml布局文件都是包裹在这个DecorView中的,所以这里我们就有了一个思路:我们可以在我们的xml布局和DecorView中间添加一个中间布局(SlidingLayout),然后所有的滑动逻辑和滑动冲突全部在这里面处理。(3)比较关键的是:当我们需要使用侧滑动能的Activity我们需要将它的主题设置成透明,这样滑动的时候就不会遮挡下面的Activity,代码如下:<style

name="AppTheme.Slide"

parent="@style/AppTheme">

<!--Required-->

<item

name="android:windowBackground">@android:color/transparent</item>

<item

name="android:windowIsTranslucent">true</item>

<item

name="android:windowAnimationStyle">@style/AppTheme.Slide.Animation</item>

</style>(4)当我们滑动超过半屏的时候,退出当前界面,否则则回退到原始位置。这里使用Scroller下面直接上代码进行分析:1)、触摸事件的处理过程,按下的位置大于X轴的十分之一就拦截当前事件,交给SlidingLayout的onTouchEvent处理/**

*

根据手指移动的距离判断是否拦截触摸事件

*

*

@param

ev

*

@return

*/

@Override

public

boolean

onInterceptTouchEvent(MotionEvent

ev)

{

int

x

=

(int)

ev.getX();

int

y

=

(int)

ev.getY();

boolean

mIntercept

=

false;

switch

(ev.getAction())

{

case

MotionEvent.ACTION_DOWN:

mInterceptDownX

=

x;

mLastInterceptX

=

x;

mLastInterceptY

=

y;

break;

case

MotionEvent.ACTION_MOVE:

int

moveX

=

x

-

mLastInterceptX;

int

moveY

=

y

-

mLastInterceptY;

//按下的位置的X位置小于屏幕的十分之一,并且x移动的距离大于y移动的距离,就拦截

if

(mInterceptDownX

<

(getWidth()

/

10)

&&

Math.abs(moveX)

>

Math.abs(moveY))

{

mIntercept

=

true;

}

else

{

mIntercept

=

false;

}

mLastInterceptX

=

x;

mLastInterceptY

=

y;

break;

case

MotionEvent.ACTION_UP:

//抬起的时候重置参数

mIntercept

=

false;

mInterceptDownX

=

mLastInterceptX

=

mLastInterceptY

=

0;

break;

}

return

mIntercept;

}

private

int

mTouchDownX;

private

int

mLastTouchX;

private

int

mLastTouchY;

@Override

public

boolean

onTouchEvent(MotionEvent

event)

{

boolean

mConsumed

=

false;

int

x

=

(int)

event.getX();

int

y

=

(int)

event.getY();

switch

(event.getAction())

{

case

MotionEvent.ACTION_DOWN:

mTouchDownX

=

x;

mLastTouchX

=

x;

mLastTouchY

=

y;

break;

case

MotionEvent.ACTION_MOVE:

int

moveX

=

x

-

mLastTouchX;

int

moveY

=

y

-

mLastTouchY;

if

(mTouchDownX

<

(getWidth()

/

10)

&&

Math.abs(moveX)

>

Math.abs(moveY)

&&

!mConsumed)

{

mConsumed

=

true;

}

if

(mConsumed)

{

int

rightMoveX

=

(int)

(mLastTouchX

-

event.getX());

if

((getScrollX()

+

rightMoveX)

>

0)

{

//向左滑动的时候,getScrollX()和rightMoveX都大于0,所以禁止滑动

scrollTo(0,

0);

}

else

{

scrollBy(rightMoveX,

0);

}

}

mLastTouchX

=

x;

mLastTouchY

=

y;

break;

case

MotionEvent.ACTION_UP:

mConsumed

=

false;

mTouchDownX

=

mLastTouchX

=

mLastTouchY

=

0;

if(-getScrollX()<getWidth()/2){

//偏移量不到屏幕宽度的一般,就回到最初的位置

scrollBack();

}else{

scrollFinish();

}

break;

case

MotionEvent.ACTION_CANCEL:

mConsumed

=

false;

mTouchDownX

=

mLastTouchX

=

mLastTouchY

=

0;

if(-getScrollX()<getWidth()/2){

//偏移量不到屏幕宽度的一般,就回到最初的位置

scrollBack();

}else{

scrollFinish();

}

break;

}

return

true;

}2)、滑动的偏移量超出屏幕的一办,就关闭当前界面否则回到初始位置/**

*

滑动到最初的位置

*/

private

void

scrollBack()

{

int

startX

=

getScrollX();

int

dx

=

-getScrollX();

mScroller.startScroll(startX,

0,

dx,

0,

300);

invalidate();

}

/**

*

向右滑动关闭

*/

private

void

scrollFinish(){

int

dx

=

-getScrollX()

-

getWidth();

mScroller.startScroll(getScrollX(),0,dx,0,300);

invalidate();

}3)、我们可以将这些侧滑处理放在我们的BaseActivity当中,需要侧滑的Activity只要继承这个BaseActivity并且主题设置成透明就可以了@Override

protected

void

onCreate(@Nullable

Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

if(enableRightSliding()){

SlidingLayout

slidingLayout

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论