0

現在、タッチでスクロールする必要があるビューがあります(scrollviewまたはscrollbyを使用できません)。現時点では、.5f を追加しているだけで、あまりスムーズでも有用でもありません。新しいAndroidのドロップダウンナビゲーションバーと同じ効果が必要です(他の効果の計算にも使用できるように、フレームごとに現在のYオフセットを知る必要もあります)。

アイデアや助けをいただければ幸いです。前もって感謝します!

    drawerCardWallet.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == MotionEvent.ACTION_DOWN) { 
            if(mVelocityTracker == null) {
                mVelocityTracker = VelocityTracker.obtain();                                 
            }
            else {
                mVelocityTracker.clear();
            }
            mVelocityTracker.addMovement(event);
        }

        if (event.getAction() == MotionEvent.ACTION_MOVE) {                              

            moveY = event.getRawY();
            if(drawerCardWallet.getY() > topHeaderLayout.getBottom() || cardImage.getY() < (topFooterMainLayout.getHeight()*2) - (cardImage.getHeight()/100*25)) {
                cardCurrentOffset = cardImage.getY();
                drawerWalletCurrentOffset = drawerCardWallet.getY();
                mVelocityTracker.addMovement(event);
                mVelocityTracker.computeCurrentVelocity(1000);
                velocityX = VelocityTrackerCompat.getXVelocity(mVelocityTracker, pointerId);
                velocityY = VelocityTrackerCompat.getYVelocity(mVelocityTracker, pointerId);

                if(Math.abs(velocityX) + 100 > Math.abs(velocityY)) {
                    // right left
                }
                else {
                    // up down                          
                    if(event.getAction() != MotionEvent.ACTION_OUTSIDE) {                           
                        if(moveY > previousRawY) {
                            // Moving down

                            if(drawerCardWallet.getY() < screenHeight - (topFooterMainLayout.getHeight()*2) - (cardImage.getHeight()/100*25)) {                                 
                                for(float i=0;i<moveY-previousRawY;i++) {
                                    cardCurrentOffset += .5f;
                                    drawerWalletCurrentOffset += .5f;

                                    cardImage.setTranslationY(cardCurrentOffset);
                                    drawerCardWallet.setTranslationY(drawerWalletCurrentOffset);
                                }
                            }
                        }
                        else {
                            // Moving Up

                            if(drawerCardWallet.getY() >= topHeaderLayout.getHeight()+3) {

                                for(float i=0;i<previousRawY-moveY;i++) {
                                    cardCurrentOffset -= .5f;
                                    drawerWalletCurrentOffset -= .5f;

                                    cardImage.setTranslationY(cardCurrentOffset);
                                    drawerCardWallet.setTranslationY(drawerWalletCurrentOffset);
                                }
                            }
                        }

                        previousRawY = moveY;
                    }
                }
            }
        }
        if (event.getAction() == MotionEvent.ACTION_UP) {
            mVelocityTracker.addMovement(event);                                 
            mVelocityTracker.recycle();
        }

        if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            mVelocityTracker.recycle();
        }
        return true;
    }
});
4

0 に答える 0