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
中使用。