基于MotionEvent更改Activity的布局宽度

时间:2014-02-24 18:34:37

标签: android android-layout

我要做的是覆盖dispatchTouchEvent(MotionEvent ev)方法,获取动作,计算动作,然后根据动作显示底部。

这是我的基本想法:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    int action = ev.getActionMasked();
    switch (action) {
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_DOWN:
            mDownX = ev.getRawX();
            mDownY = ev.getRawY();
            break;
        case MotionEvent.ACTION_MOVE:
            float deltaY = ev.getRawY() - mDownY;
            Log.d(TAG, "delta y: " + deltaY);
            if (deltaY < -50f) {
                // show bottom part
            }
            if (deltaY > 50f) {
                // close bottom part
            }
            break;
        default:
            break;
    }
    return false;
}

我的问题是:我应该使用什么来更改此活动宽度的宽度并显示底部?

提前致谢: - )

1 个答案:

答案 0 :(得分:1)

好的,所以我喜欢布局黑客。

对于这个例子,我将有一个顶部和一个底部,这是你想要在运动事件上​​公开的部分。

在您的滑动功能上,将bottomBlock的可见性设置为可见,animateLayoutChanges会使其看起来像是在向上滑动。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="0"
    android:layout_weight="1"
    android:orientation="vertical"
    android:animateLayoutChanges="true" >
    <LinearLayout
        android:id="@+id/topBlock"
        android:layout_width="match_parent"
        android:layout_height="0"
        android:layout_weight="1" >
    </LinearLayout>
    <LinearLayout
        android:id="@+id/bottomBlock"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:visibility="gone" >
    </LinearLayout>
</LinearLayout