簡體   English   中英

如何在滑動時顯示和隱藏視圖

[英]How to show and hide a view on swiping

我有一個Coverflow,下面是我的相機,當用戶向上滑動Coverflow時,我想將其隱藏並以全屏顯示相機;當他向下滑動時,我要在40%的屏幕中顯示Coverflow,相機的其余部分,我該如何實現這一幫助?

最后,我通過使用此庫中的代碼https://github.com/gunasiet/SlidingMenuExample做到了

它具有類似Facebook類型的滑出菜單,它可以水平滑出並顯示菜單項,我希望它以Coverflow替換Menu的相同方式

我通過changing x,y coordinates 菜單布局上的changing x,y coordinates來操縱代碼changing x,y coordinates菜單布局曾經水平滑出,並在用戶滑動時從上到下垂直滑動

protected void onLayout(boolean changed, int left, int top, int right, int bottom)
    {
        // System.out.println(" ~~~onLayout changed="+changed);
        if (changed)
        {
            //
            LayoutParams contentLayoutParams = (LayoutParams) content.getLayoutParams();
            contentLayoutParams.height = this.getHeight();
            contentLayoutParams.width = this.getWidth();
            LayoutParams menuLayoutParams = (LayoutParams) menu.getLayoutParams();
            // menuLayoutParams.height = this.getHeight();
            // menuLayoutParams.width = this.getWidth() - menuRightMargin;
            menuLayoutParams.height = this.getHeight() - menuRightMargin;
            menuLayoutParams.width = this.getWidth();
        }
        // menu.layout(left, top, right- menuRightMargin , bottom );
        // content.layout(left + contentXOffset, top, right +
        // contentXOffset,bottom);

        menu.layout(left, top, right, bottom - menuRightMargin);
        content.layout(left, top + contentXOffset, right, bottom + contentXOffset);
        if (changed)
            if(!CameraFragment.isCoverFlowClosed)
                toggleMenu();
}

public void toggleMenu()
    {

        if (currentMenuState == MenuState.HIDING || currentMenuState == MenuState.SHOWING)
            return;

        // System.out.println(" ~~~toggleMenu currentMenuState="+currentMenuState);
        switch (currentMenuState)
        {
        case HIDDEN:
            currentMenuState = MenuState.SHOWING;
            menu.setVisibility(View.VISIBLE);
            //slideIcon.setBackground(context.getResources().getDrawable(R.drawable.down_arrow));
            //slideIcon.setBackgroundResource(R.drawable.down_arrow);
            /*
             * menuScroller.startScroll(0, 0, 0, menu.getLayoutParams().height,
             * SLIDING_DURATION);
             */
            menuScroller.startScroll(0, contentXOffset, 0, menu.getLayoutParams().height - contentXOffset, SLIDING_DURATION);
            break;
        case SHOWN:
            currentMenuState = MenuState.HIDING;
            menuScroller.startScroll(0, contentXOffset, 0, -contentXOffset, SLIDING_DURATION);
            //slideIcon.setBackground(context.getResources().getDrawable(R.drawable.up_arrow));
            //slideIcon.setBackgroundResource(R.drawable.up_arrow);
            break;
        default:
            break;
        }
        menuHandler.postDelayed(menuRunnable, QUERY_INTERVAL);
        this.invalidate();
    }

private void adjustContentPosition(boolean isScrolling)
    {
        int scrollerXOffset = menuScroller.getCurrY();

        // System.out.println("scrollerXOffset=="+scrollerXOffset+" contentXOffset="+contentXOffset
        // +" scrollerXOffset - contentXOffset="+(scrollerXOffset -
        // contentXOffset));
        // content.offsetLeftAndRight(scrollerXOffset - contentXOffset);
        content.offsetTopAndBottom(scrollerXOffset - contentXOffset);
        contentXOffset = scrollerXOffset;
        this.invalidate();
        fancyCoverFlow.bringToFront();
        if (isScrolling)
            menuHandler.postDelayed(menuRunnable, QUERY_INTERVAL);
        else
            this.onMenuSlidingComplete();
    }

public boolean onContentTouch(View v, MotionEvent event)
    {
        if (currentMenuState == MenuState.HIDING || currentMenuState == MenuState.SHOWING)
            return false;
        int curX = (int) event.getRawY();
        int diffX = 0;

        switch (event.getAction())
        {
        case MotionEvent.ACTION_DOWN:

            // System.out.println("~~~ ACTION_DOWN ~~~ curX="+curX);
            prevX = curX;
            return true;

        case MotionEvent.ACTION_MOVE:
            if (!isDragging)
            {
                // System.out.println("~~ currentMenuState=="+currentMenuState+" isDragging=="+isDragging);
                isDragging = true;
                menu.setVisibility(View.VISIBLE);

            }
            diffX = curX - prevX;
            // System.out.println("~~~ ACTION_MOVE ~~~ curX=="+curX+" prevX=="+prevX+" contentXOffset="+contentXOffset);
            if (contentXOffset + diffX <= 0)
            {
                diffX = -contentXOffset;
            } else if (contentXOffset + diffX > mainLayoutWidth - menuRightMargin)
            {
                diffX = mainLayoutWidth - menuRightMargin - contentXOffset;
            }
            // content.offsetLeftAndRight(diffX);
            content.offsetTopAndBottom(diffX);
            fancyCoverFlow.bringToFront();
            contentXOffset += diffX;
            this.invalidate();

            prevX = curX;
            lastDiffX = diffX;
            // System.out.println("~~~ ACTION_MOVE ~~~ contentXOffset="+contentXOffset+" diffX="+diffX);
            return true;

        case MotionEvent.ACTION_UP:
            Log.d("MainLayout.java onContentTouch()", "Up lastDiffX " + lastDiffX);

            if (lastDiffX == 0)
            {
                toggleMenu();
                isDragging = false;
                prevX = 0;
                lastDiffX = 0;
            }
            if (lastDiffX > 0)
            {
                currentMenuState = MenuState.SHOWING;
                // menuScroller.startScroll(contentXOffset, 0,
                // menu.getLayoutParams().width - contentXOffset, 0,
                // SLIDING_DURATION);
                menuScroller.startScroll(0, contentXOffset, 0, menu.getLayoutParams().height - contentXOffset, SLIDING_DURATION);
            } else if (lastDiffX < 0)
            {
                currentMenuState = MenuState.HIDING;
                menuScroller.startScroll(0, contentXOffset, 0, -contentXOffset, SLIDING_DURATION);
            }
            menuHandler.postDelayed(menuRunnable, QUERY_INTERVAL);
            this.invalidate();
            isDragging = false;
            prevX = 0;
            lastDiffX = 0;
            // System.out.println("~~~  ACTION_UP ~~~");
            return true;

        default:
            break;
        }

        return false;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM