2014-06-26 5 views
0

Je veux créer un menu personnalisé pour mon application Android comme https://github.com/XavierDK/XDKAirMenu de l'iPhone. Mon application affiche le menu sur le côté gauche de l'écran et son contenu sur le côté droit de l'écran.Déplacer et mettre à l'échelle la vue personnalisée en android

Cette la mise en page personnalisée pour le côté droit de l'écran (vue contenu)

public boolean onTouchEvent(MotionEvent event) { 
       gestureDetector.onTouchEvent(event); 

       if (isTranformed) { 
        final int X = (int) event.getRawX(); 
        final int Y = (int) event.getRawY(); 
        switch (event.getAction()) { 
        case MotionEvent.ACTION_MOVE: 
         FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) this .getLayoutParams(); 
         if (layoutParams.leftMargin == 0 && layoutParams.topMargin == 0) { 
          //requestLayout(); 
          isTranformed = false; 
          isScrolling = false; 
          break; 
         } 
         isScrolling = true; 
         int xDiff = layoutParams.leftMargin - (X - _xDelta); 
         layoutParams.leftMargin = X - _xDelta; 
         int scaleFactor = layoutParams.leftMargin > 0 ? layoutParams.leftMargin : 1; 
         layoutParams.topMargin = layoutParams.topMargin - ((layoutParams.topMargin/scaleFactor) * xDiff); 

         if (layoutParams.leftMargin < 0) { 
          layoutParams.leftMargin = 0; 
         } 
         if (layoutParams.topMargin < 0) { 
          layoutParams.topMargin = 0; 
         } 
         layoutParams.width = (displayMetrics.widthPixels - layoutParams.leftMargin); 
         layoutParams.height = (displayMetrics.heightPixels - (layoutParams.topMargin * 2)); 
         this.setLayoutParams(layoutParams); 
         //invalidate(); 
         //setLeft(layoutParams.leftMargin); 
         //setTop(layoutParams.topMargin); 
     /*    this.setX(layoutParams.leftMargin); 
         this.setY(layoutParams.topMargin);*/ 
         this.requestLayout(); 

         break; 

        case MotionEvent.ACTION_UP: 
         if (isScrolling) { 
          FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) CustomSlidingLayout.this 
            .getLayoutParams(); 

          if (params.leftMargin < displayMetrics.widthPixels/2) { 

           if (!isAnimating) { 
            isAnimating = true; 
            ResizeMoveAnimation anim = new ResizeMoveAnimation(
              this, 0, 0, displayMetrics.widthPixels, 
              displayMetrics.heightPixels); 
            anim.setAnimationListener(animationListener); 
            startAnimation(anim); 
           } 
          } else { 
           if (!isAnimating) { 
            isAnimating = true; 
            Rect rect = new Rect(); 
            getLocalVisibleRect(rect); 
            ResizeMoveAnimation anim = new ResizeMoveAnimation(
              this, (int) (displayMetrics.widthPixels * 0.8), 
              displayMetrics.heightPixels/4, 
              displayMetrics.widthPixels * 2, 
              (int) (displayMetrics.heightPixels * 0.75)); 
            // anim.setAnimationListener(animationListener); 
            startAnimation(anim); 
            isAnimating = false; 
           } 
          } 
          isScrolling = false; 
         } 

         break; 

        case MotionEvent.ACTION_DOWN: 
         FrameLayout.LayoutParams lParams = (FrameLayout.LayoutParams) this 
           .getLayoutParams(); 
         _xDelta = X - lParams.leftMargin; 
         break; 
        } 
        return true; 
       } 
       return false; 
      } 
     } 

Vue sur le côté droit (vue contenu) redimensionnez à une petite taille lorsque, cliquez sur le menu button.and il redimensionne son taille d'origine lorsque vous appuyez sur la vue redimensionnée.Aussi, je veux mettre à l'échelle et déplacer la vue de droite à gauche au toucher. L'extrait de code ci-dessus présente des problèmes de position d'affichage. Il ne met pas à jour correctement la disposition/position de la vue. Comment puis-je résoudre le problème?

Répondre

0

Utilisez ce code pour obtenir la mise à l'échelle et de transition animation

float scalefactor = 0.5; 
    float translateX = 500; // Translate amount 
    view.animate().scaleX(scalefactor).translationXBy(translateX).start(); 

pour la marche arrière animation

view.animate().scaleX(1).translationXBy(-translateX).start(); 
+0

Je veux déplacer et redimensionner (faire la mise à l'échelle (petite) en vue de sa taille d'origine) tout en faisant glisser it.Referred oNDragListener.But ist n'a pas fonctionné pour moi. –

+0

Dans ce cas, vous devez changer view.setscalex() dans le onDragListner – SathMK

Questions connexes