0

预期结果

Web 视图可以滚动,并且可以响应移动或甩动等手势。

我想要实现的是类似于 Facebook 应用程序的东西。假设我们有一个内容视图,它由一个控制栏(在状态栏正下方的上半部分)和一个显示一些网页的网页视图组成。在上部控制栏中,左上角有一个菜单切换按钮,可以打开和关闭菜单窗格视图。

通过向右移动内容视图来显示菜单,通过将内容视图移回其原始位置来隐藏菜单。

除了单击菜单切换按钮之外,还可以实现 Web 视图的翻转或拖动以隐藏菜单。

问题

在将 Web 视图设置为触摸侦听器后,当我尝试在 Web 视图中滚动时没有发生任何事情。

源代码

MainActivity.java

public class MainActivity extends Activity implements OnTouchListener, OnGestureListener {

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // WebView
    WebView mWebViewContentRight = (WebView) findViewById(R.id.web_view_content_right);
    mWebViewContentRight.setWebViewClient(new WebViewClient());
    mWebViewContentRight.getSettings().setJavaScriptEnabled(true);
    mWebViewContentRight.getSettings().setLoadsImagesAutomatically(true);
    mWebViewContentRight.loadUrl("http://m.com2us.com");
    mWebViewContentRight.setOnTouchListener(this);

    // Gesture detector
    mGestureDetector = new GestureDetector(this);
    
    // Dismiss shown keyboard
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm.isAcceptingText()) {
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

    // Implements View.OnTouchListener
@Override
public boolean onTouch(View view, MotionEvent event) {
    final int X = (int) event.getRawX();
    
    view = (View) view.getParent(); // i.e. linear_layout_content_right
    LinearLayout.LayoutParams mLayoutParams = (LinearLayout.LayoutParams) view.getLayoutParams(); 

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
            _xDelta = X - mLayoutParams.leftMargin;
            break;
        case MotionEvent.ACTION_UP:
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            break;
        case MotionEvent.ACTION_POINTER_UP:
            break;
        case MotionEvent.ACTION_MOVE:
            if (isMenuHidden == true) {
                if (((X - _xDelta) < -384) || ((X - _xDelta) > 0)) {
                    // The move allows at most 480 * 80% = 384 pixels leftward and zero pixels rightward
                } else {
                    // TODO : Implement later
                }

            } else { // isMenuHidden == false
                if (((X - _xDelta) < -384) || ((X - _xDelta) > 0)) {
                    // The move allows at most 480 * 80% = 384 pixels leftward and zero pixels rightward
                } else {
                    mLayoutParams.leftMargin = X - _xDelta;
                    view.setLayoutParams(mLayoutParams);
                    
                    if (mLayoutParams.leftMargin <= -192) {
                        mLayoutParams.leftMargin = -384;
                        view.setLayoutParams(mLayoutParams);
                        isMenuHidden = true;
                    }
                }
            }
            break;
    }

    return true;
    //return mGestureDetector.onTouchEvent(event);
}
// End of Implementation of View.OnTouchListener public methods

}

activity_mail.xml

    <!-- Content view including a control bar 329dp wide by 40dp high,
           and a web view 329dp wide by 509dp high.

           Screen size is 329dp (width by 549dp (height).
           where the menu takes 80% of the width, that is, 263.2dp.

           There is an invisible view as a placeholder above the menu
           and to the left of the content view, which may be not necessary,
           but this is my way to implement it.
    -->
    <LinearLayout
        android:id="@+id/linear_layout_content_right"
        android:layout_width="329dp"
        android:layout_height="549dp"
        android:layout_marginLeft="-263.2dp"
        android:background="#FF0099FF"
        android:gravity="left|top"
        android:orientation="vertical" >

        <!-- The Menu button -->
        <Button
            android:id="@+id/button_menu"
            android:layout_width="55dp"
            android:layout_height="40dp"
            android:layout_gravity="left|top"
            android:onClick="onButtonMenuClicked"
            android:text="@string/button_menu" />

        <!-- The WebView -->
        <WebView
            android:id="@+id/web_view_content_right"
            android:layout_width="329dp"
            android:layout_height="509dp"
            android:longClickable="true"
            android:scrollbarStyle="insideOverlay" />

    </LinearLayout> <!-- End of Content right -->

谢谢你。

4

1 回答 1

2

我们需要查看您对触摸侦听器的实现。看起来您正在通过返回truein来消费该事件onTouch

更多细节在这里

于 2013-07-09T07:19:54.490 回答