Horizontal Scroll View inside ViewPager

后端 未结 3 1116
忘了有多久
忘了有多久 2020-12-13 22:59

I have horizontal scrolling pages as in the android market (ViewPager).

My problem is that i want to have a Horizontal Scrolling View in them with some images?Is tha

3条回答
  •  北海茫月
    2020-12-13 23:40

    I've reworked a solution and finally found a very simple way to implement it the same way it's been done on GMail: the HorizontalScrollView will scroll until it reaches one of its edges. Then on next scrolling, the whole page will scroll.

    All it required was overriding the HorizontalScrollView to check scroll direction vs edges and also make sure content can actually scroll.

    @Override
    public boolean onTouchEvent(MotionEvent ev) 
    {
        if (no_scrolling)
            return false;
    
        //  Standard behavior
        //
        return super.onTouchEvent(ev);
    }
    
    boolean no_scrolling = false;
    float old_x, old_y;
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev)
    {
        int action = ev.getActionMasked();
        Log.d(at_data.TAG, "HSV scroll intercept: " + String.format("0x%08x", action));
    
        if (action == MotionEvent.ACTION_DOWN)
        {
            old_x = ev.getX();
            old_y = ev.getY();
            no_scrolling = false;
    
        }
        else if (action == MotionEvent.ACTION_MOVE)
        {
            float dx = ev.getX() - old_x;
            float dy = ev.getY() - old_y;
    
            if (Math.abs(dx) > Math.abs(dy) && dx != 0)
            {
                View hsvChild = getChildAt(0);
                int childW = hsvChild.getWidth();
                int W = getWidth();
    
                Log.d(at_data.TAG, "HSV " + childW + " > " + W + " ? dx = " + dx + " dy = " + dy);
                if (childW > W)
                {
                    int scrollx = getScrollX();
                    if ( (dx < 0 && scrollx + W >= childW) || (dx > 0 && scrollx <= 0))
                    {
                        Log.d(at_data.TAG, "HSV Wider: on edge already");
                        no_scrolling = true;
                        return false;
                    }
                    else
                    {
                        Log.d(at_data.TAG, "HSV Wider: can scroll");
                        no_scrolling = false;
                    }
                }
                else
                {
                    Log.d(at_data.TAG, "HSV cannot scroll in desired direction");
                    no_scrolling = true;
                }
            }
        }
    
        //  Standard behavior
        //
        return super.onInterceptTouchEvent(ev);
    }
    

提交回复
热议问题