two directional scroll view

前端 未结 9 1217
野的像风
野的像风 2020-12-09 05:03

I would like to have a linearlayout with a header section on top and a webview below. The header will be short and the webview may be longer and wider than the screen.

9条回答
  •  醉梦人生
    2020-12-09 06:07

    there is another way. moddified HorizontalScrollView as a wrapper for ScrollView. normal HorizontalScrollView when catch touch events don't forward them to ScrollView and you only can scroll one way at time. here is solution:

    package your.package;
    
    import android.widget.HorizontalScrollView;
    import android.widget.ScrollView;
    import android.view.MotionEvent;
    import android.content.Context;
    import android.util.AttributeSet;
    
    public class WScrollView extends HorizontalScrollView
    {
        public ScrollView sv;
        public WScrollView(Context context)
        {
            super(context);
        }
    
        public WScrollView(Context context, AttributeSet attrs)
        {
            super(context, attrs);
        }
    
        public WScrollView(Context context, AttributeSet attrs, int defStyle)
        {
            super(context, attrs, defStyle);
        }
    
        @Override public boolean onTouchEvent(MotionEvent event)
        {
            boolean ret = super.onTouchEvent(event);
            ret = ret | sv.onTouchEvent(event);
            return ret;
      }
    
        @Override public boolean onInterceptTouchEvent(MotionEvent event)
        {
            boolean ret = super.onInterceptTouchEvent(event);
            ret = ret | sv.onInterceptTouchEvent(event);
            return ret;
        }
    }
    

    using:

        @Override public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
    
    /*BIDIRECTIONAL SCROLLVIEW*/
            ScrollView sv = new ScrollView(this);
            WScrollView hsv = new WScrollView(this);
            hsv.sv = sv;
    /*END OF BIDIRECTIONAL SCROLLVIEW*/
    
            RelativeLayout rl = new RelativeLayout(this);
            rl.setBackgroundColor(0xFF0000FF);
            sv.addView(rl, new LayoutParams(500, 500));
            hsv.addView(sv, new LayoutParams(WRAP_CONTENT, MATCH_PARENT /*or FILL_PARENT if API < 8*/));
            setContentView(hsv);
        }
    

提交回复
热议问题