【移动应用开发技术】Android仿iOS如何实现侧滑返回功能_第1页
【移动应用开发技术】Android仿iOS如何实现侧滑返回功能_第2页
【移动应用开发技术】Android仿iOS如何实现侧滑返回功能_第3页
【移动应用开发技术】Android仿iOS如何实现侧滑返回功能_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

【移动应用开发技术】Android仿iOS如何实现侧滑返回功能

这篇文章将为大家详细讲解有关Android仿iOS如何实现侧滑返回功能,在下觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上个效果再说:原理Activity本身是不可以滑动的,但是我们可以制造一个正在滑动Activity的假象,使得看起来这个Activity正在被手指滑动。其原理其实很简单,我们滑动的其实是Activity里面的可见View元素,而我们将Activity设置为透明的,这样当View滑过的时候,由于Activity的底部是透明的,我们就可以在滑动过程中看到下面的Activity,这样看起来就是在滑动Activity。所以Activity滑动效果分两步:设置Activity透明滑动View实现1、设置透明:资源文件values->styles.xml添加如下代码,搞一个透明的主题。<style

name="Transparent"

parent="Theme.AppCompat.Light.NoActionBar">

<item

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

<item

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

</style>然后在AndroidManifest.xml文件里面给相应的Activity设置透明的主题。比如MainActivity:<activity

android:name="com.example.test.MainActivity"

android:theme="@style/Transparent"

>

</activity>2、滑动View:先看看Activity的层次结构:我们用的Activity的xml的根View并不是Activity的根View,在它上面还有一个父View,id是android.R.id.content,再向上一层,还有一个view,它是一个LinearLayout,它除了放置我们创建的View之外,还放置我们的xml之外的一些东西比如放ActionBar或者标题栏什么的。而再往上一级,就到了Activity的根View——DecorView,结构如下图所示:要做到像iOS那样可以滑动整个Activity,只滑动我们在xml里面创建的View显然是不对的,因为我们还有标题栏、ActionBar什么的,所以我们要滑动的应该是DecorView或者倒数第二层的那个View。而要滑动View的话,我们要重写其父窗口的onInterceptTouchEvent以及onTouchEvent(当然使用setOnTouchListener不是不可能,但是如果子View里面有一个消费了onTouch事件,那么也就接收不到了),但是窗口的创建过程不是我们能控制的,DecorView的创建都不是我们能干预的。解决办法就是,我们自己创建一个SwipeLayout,然后人为地插入顶层View中,放置在DecorView和其下面的LinearLayout中间,随着手指的滑动,不断改变SwipeLayout的子View——曾经是DecorView的子View——的位置,这样我们就可以控制Activity的滑动啦。我们在Activity的onPostCreate方法中调用swipeLayout.replaceLayer替换我们的SwipeLayout,代码如下:public

void

replaceLayer(Activity

activity)

{

mActivity

=

activity;

screenWidth

=

getScreenWidth(activity);

setClickable(true);

//获取

Activity

View

ViewGroup

root

=

(ViewGroup)

activity.getWindow().getDecorView();

//获取

View

下面的第一个

View,并保存到

content

content

=

root.getChildAt(0);

ViewGroup.LayoutParams

params

=

content.getLayoutParams();

ViewGroup.LayoutParams

params2

=

new

ViewGroup.LayoutParams(-1,

-1);

//把根

View

下面原来的第一个

View

删除

root.removeView(content);

//把

content

添加到

SwipeLayout

this.addView(content,

params2);

//再把

SwipeLayout

添加到根

View

里面

root.addView(this,

params);

sideWidth

=

(int)

(sideWidthInDP

*

activity.getResources().getDisplayMetrics().density);

}然后把这些写成一个SwipeActivity要求实现侧滑返回的Activity继承SwipeActivity,SwipeActivity继承FragmentActivity或者Activity。比如MainActivity:public

class

SwipeActivity

extends

FragmentActivity

{

...

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

}

...

}public

class

MainActivity

extends

SwipeActivity

{

...

@Override

protected

void

onCreate(Bundle

savedInstanceState)

{

super.onCreate(savedInstanceState);

}

...

}Android是一种基于Linux内核的自由及

温馨提示

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

评论

0/150

提交评论