2016-08-05 18 views
3

Ich möchte Schaltfläche in die Mitte verschieben, zeigen Sie es, dann in die Ecke bewegen.beginDelayedTransition funktioniert nicht, zeigt nur die endgültige Sichtposition

Aber es wird sich nicht bewegen, es erscheint sofort in der Ecke. Warum?

upd Android 5.1, API 22.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
       // remember true position/size 
       final RelativeLayout.LayoutParams layoutParams_= (RelativeLayout.LayoutParams) mapFollowButton.getLayoutParams(); 
       // create temp position/size from which will move 
       final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int) (150*density), (int) (150*density)); 
       layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); 
       mapFollowButton.setLayoutParams(layoutParams); 
       mapFollowButton.setVisibility(View.INVISIBLE); 
       mapFollowButton.invalidate(); 

       final ChangeBounds transition= new ChangeBounds(); 
       transition.setDuration(1000L); 
       TransitionManager.beginDelayedTransition((ViewGroup) findViewById(R.id.mainRL),transition); 
       //here expected to move to true position from center 
       mapFollowButton.setLayoutParams(layoutParams_); 
       mapFollowButton.setVisibility(View.VISIBLE); 
} else 
       mapFollowButton.setVisibility(View.VISIBLE); 

Antwort

3

Nun, ich habe eine Lösung gefunden. Arbeiten, aber seltsam genug, nirgends erwähnt. Müssen nur eine Pause machen, sogar 10ms. Der Rest ist gleich.

   .... 
       //mapFollowButton.invalidate(); 

       mapFollowButton.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
          final ChangeBounds transition= new ChangeBounds(); 
          transition.setDuration(1000L); 
          TransitionManager.beginDelayedTransition((ViewGroup) findViewById(R.id.mainRL),transition); 
         } 
         mapFollowButton.setLayoutParams(layoutParams_); 
         mapFollowButton.setVisibility(View.VISIBLE); 
        } 
       },10); 
+0

und für XY setX() nicht verwenden, verwenden Sie layoutParams.setMargins() – djdance