ViewDragHelper和SwipeBackLayout的若干筆記

SwipeBackLayout

SwipeBackLayout是一個好用的第三方庫(特別是README,由於是中文T.T),代碼也很簡單,主要是如下幾個文件:java

  • Utils.javaandroid

  • SwipeBackLayout.javagit

  • ViewDragHelper.javagithub

以及默認繼承自FragmentActivitySwipeBackActivitysegmentfault

SwipeBackLayout的使用依賴android-support-4.jar,可是其使用了較高版本中的ViewDragHelper官方類,不過方法是直接引用了一個文件。ide

AppCompatActivity的使用

新時代中,經歷了ActionBarActivity以後,迎來了新的AppCompatActivity,對於繼承自FragmentActivitySwipeBackActivity天然是不夠用,不過好在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

ViewDragHelper的使用

ViewDragHelper特性

  • ViewDragHelper.Callback鏈接了ViewDragHelper和其須要處理的View(其實必須是ViewGroup

  • ViewDragHelper必須經過工程靜態方法ViewDragHelper.create建立

  • 能夠指定拖動方向

  • 能夠檢測是否觸及邊緣

  • ViewDragHelper不直接處理拖動的View,而是經過callback使其容器對View進行操做

  • ViewDragHelper本質是分析OnInterceptTouchEventOnTouchEventMotionEvent參數,從而改變容器中被拖動的子View位置

ViewDragHelper是在自定義Layout中而不是在一個任意的Layout中使用。

使用方法

相關文章
相關標籤/搜索