0

我試圖在我的應用程序中實現聊天頭。我已經設法使所有的工作,onClick打開自定義佈局,這是一個與webview和一些按鈕的相對佈局。當點擊同時打開定義的佈局時,聊天頭移動到右上角。 我現在面臨的唯一問題是聊天頭翻譯,當它移動到右上角時,它不能平穩過渡,因爲我沒有給它任何動畫,我不知道如何。 我搜索了一個mwthod,發現我嘗試使用的ValueAnimator。如何用動畫對角地翻譯windowmanager浮動佈局? (ChatHead點擊動畫)

 private ValueAnimator mMoveEdgeAnimator; 


     mParams.y = goalPositionY; 

     mMoveEdgeAnimator = ValueAnimator.ofInt(currentX, goalPositionX); 
     mMoveEdgeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator animation) { 
       mParams.x = (Integer) animation.getAnimatedValue(); 
       mWindowManager.updateViewLayout(FloatingView.this, mParams); 
      } 
     }); 

     mMoveEdgeAnimator.setDuration(MOVE_TO_EDGE_DURATION); 
     mMoveEdgeAnimator.setInterpolator(mMoveEdgeInterpolator); 
     mMoveEdgeAnimator.start(); 

但它僅適用於軸X或Y看起來並不無縫屏幕之一,我希望它翻譯對角線與Facebook類似chathead如何反應的onClick。

如何對角線翻譯它?另外我怎樣才能在windowManager.addView()上應用增長動畫?

在此先感謝!

回答

0

您可以使用Property Value Holders在x和y之間設置動畫。

public void animate(final View v, int startX, int endX, int startY, int endY) { 

    PropertyValuesHolder pvhX = PropertyValuesHolder.ofInt("x", startX, endX); 
    PropertyValuesHolder pvhY = PropertyValuesHolder.ofInt("y", startY, endY); 

    ValueAnimator translator = ValueAnimator.ofPropertyValuesHolder(pvhX, pvhY); 

    translator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
     @Override 
     public void onAnimationUpdate(ValueAnimator valueAnimator) { 
      WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) v.getLayoutParams(); 
      layoutParams.x = (Integer) valueAnimator.getAnimatedValue("x"); 
      layoutParams.y = (Integer) valueAnimator.getAnimatedValue("y"); 
      windowManager.updateViewLayout(v, layoutParams); 
     } 
    }); 

    translator.setDuration(100); 
    translator.start(); 
}