SwipeBackLayout
是一个好用的第三方库(特别是README,由于是中文T.T),代码也很简单,主要是如下几个文件:java
Utils.javaandroid
SwipeBackLayout.javagit
ViewDragHelper.javagithub
以及默认继承自FragmentActivity
的SwipeBackActivity
。segmentfault
SwipeBackLayout
的使用依赖android-support-4.jar
,可是其使用了较高版本中的ViewDragHelper
官方类,不过方法是直接引用了一个文件。ide
新时代中,经历了ActionBarActivity
以后,迎来了新的AppCompatActivity
,对于继承自FragmentActivity
的SwipeBackActivity
天然是不够用,不过好在SwipeBackActivity
结构简单,只须要模仿代码中SwipeBackActivity
的写法,继承自AppCompatActivity
便可。this
public class AppCompatSwipeBackActivity extends AppCompatActivity implements SwipeBackActivityBase { private SwipeBackActivityHelper mHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHelper = new SwipeBackActivityHelper(this); mHelper.onActivityCreate();; } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mHelper.onPostCreate(); } @Override public View findViewById(int id) { View v = super.findViewById(id); if (v == null && mHelper != null) { return mHelper.findViewById(id); } return v; } @Override public SwipeBackLayout getSwipeBackLayout() { return mHelper.getSwipeBackLayout(); } @Override public void setSwipeBackEnable(boolean enable) { getSwipeBackLayout().setEnableGesture(enable); } @Override public void scrollToFinishActivity() { Utils.convertActivityToTranslucent(this); getSwipeBackLayout().scrollToFinishActivity(); } }
使用SwipeBackLayout
库的Activity须要在Theme中设置.net
<item name="android:windowIsTranslucent">true</item>
便可。code
参考资料blog
ViewDragHelper
特性ViewDragHelper.Callback
链接了ViewDragHelper
和其须要处理的View
(其实必须是ViewGroup
)
ViewDragHelper
必须经过工程静态方法ViewDragHelper.create
建立
能够指定拖动方向
能够检测是否触及边缘
ViewDragHelper
不直接处理拖动的View
,而是经过callback
使其容器对View
进行操做
ViewDragHelper
本质是分析OnInterceptTouchEvent
和OnTouchEvent
的MotionEvent
参数,从而改变容器中被拖动的子View
位置
ViewDragHelper
是在自定义Layout
中而不是在一个任意的Layout
中使用。