像知乎、iOS那样滑动Activity
来源:互联网 发布:项目软件外包交易平台 编辑:程序博客网 时间:2024/05/17 23:12
设置透明: 建立一个Style,在Style里面添加下面两行,并将这个style应用在activity上就可以了
<item name="android:windowBackground">@*android:color/transparent</item><item name="android:windowIsTranslucent">true</item>
滑动view:先看看activity的层次结构:如下图,我们用的activity的xml的根view(在下图中是倒数第二层的FrameLayout)并不是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——的位置,这样我们就可以控制我们的滑动啦。
我们在自定义的SwipeLayout中添加一个replaceLayer,这个方法执行将SwipeLayout插入顶层的代码,并在activity的onPostCreate()方法中调用swipeLayout.replaceLaye()替换我们的SwipeLayout,代码如下:
public void replaceLayer(Activity activity) { mActivity = activity; screenWidth = getScreenWidth(activity); setClickable(true); ViewGroup root = (ViewGroup) activity.getWindow().getDecorView(); content = root.getChildAt(0); ViewGroup.LayoutParams params = content.getLayoutParams(); ViewGroup.LayoutParams params2 = new ViewGroup.LayoutParams(-1, -1); root.removeView(content); this.addView(content, params2); root.addView(this, params); }
- 像知乎、iOS那样滑动Activity
- 像知乎、iOS那样滑动Activity
- 像iOS的UINavigationController、知乎的Android版那样可以对Activity进行滑动返回操作
- 如何实现像ios那样的富有弹性的ListView (上下滑动有弹性,且能恢复原状)
- Android实现IOS向右滑动退出当前Activity
- Android滑动切换activity
- tabhost activity 手势滑动
- ViewPager 滑动切换 activity
- 使用ViewPager滑动Activity
- Activity滑动手势检测
- 滑动切换Activity(GestureDetector)
- 滑动切换Activity(GestureDetector)
- 滑动切换Activity
- 手势滑动销毁Activity
- 滑动关闭Activity
- 滑动切换activity
- Android滑动删除activity
- activity左右滑动
- 瓷砖空鼓会造成哪些危害?
- Unity中使用NGUI和FingerGestures插件点击UI穿透的问题
- [LeetCode] Multiply Strings
- cocos2dx—-屏幕自适应
- windows基础应用程序编程(十)子类和超类
- 像知乎、iOS那样滑动Activity
- C#和Java实现互通的RSA&DES加解密算法(一)
- java数组(定义、赋值和初始化)
- iOS之AutoresizingMask, autoresizesSubviews
- Hbase 学习笔记: Hbase的架构和实现原理
- PHP simplexml解析结果需要进行强制类型转换
- bzoj1042_递推加容斥原理
- Oracle数据库的varchar2(2)存储一个汉字时提示插入汉字过长问题
- CXF学习笔记(1)-HelloWorld!-发布webservice .