2014-10-21 28 views
0

我需要使用動畫旋轉ImageView,以便ImageView的寬度和高度也發生變化。如何以編程方式旋轉ImageView,而不僅僅是圖像

我已經嘗試使用ViewPropertyAnimator,使用View.animate,但這只是旋轉圖像,而不是實際的視圖本身。

我需要使用它,這樣我可以計算出旋轉後視圖的x和y座標,以及它的寬度和高度。

我做了一個測試應用程序,只是旋轉一張卡片圖像,我已經拍攝了佈局可見的圖片,以顯示我的意思。

正如你可以在代碼中看到的,我也試圖在動畫完成後強制更改可運行的寬度和高度,但這不起作用。也不使用scaleX/scaleY來嘗試和改變事物。

Before rotation

After rotation

public class MyActivity extends Activity implements View.OnClickListener{ 

RelativeLayout temp; 

ImageView card; 
int rotation = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 
    card = (ImageView) findViewById(R.id.card); 
    card.setOnClickListener(this); 
} 

@Override 
public void onClick(final View v) { 


    final Runnable e1 = new Runnable() { 
     public void run() { 
      Toast.makeText(MyActivity.this, "After1 w="+v.getMeasuredWidth()+" h="+v.getMeasuredHeight(), Toast.LENGTH_SHORT).show(); 
      int w = v.getMeasuredWidth(); 
      int h = v.getMeasuredHeight(); 
      v.getLayoutParams().width = h; 
      v.getLayoutParams().height = w; 
      v.setLayoutParams(v.getLayoutParams()); 
      Toast.makeText(MyActivity.this, "After2 w="+v.getMeasuredWidth()+" h="+v.getMeasuredHeight(), Toast.LENGTH_SHORT).show(); 

     } 
    }; 

    int[] cardCoords = new int[2]; 
    v.getLocationOnScreen(cardCoords); 
    Toast.makeText(MyActivity.this, "x="+cardCoords[0]+" y="+cardCoords[1], Toast.LENGTH_SHORT).show(); 
    Toast.makeText(this, "Before w="+v.getMeasuredWidth()+" h="+v.getMeasuredHeight(), Toast.LENGTH_SHORT).show(); 
    rotation = rotation + 90; 

    v.animate(). 
      setDuration(1000). 
      rotationBy(90); 
      //scaleX((float) v.getMeasuredHeight()/(float) v.getMeasuredWidth()). 
      //scaleY((float) v.getMeasuredHeight()/(float) v.getMeasuredWidth()). 
      //.withEndAction(e1); 

} 

}

回答

0

,你應該尋找到旋轉視圖,而不是那麼圖像。

Rotating a view in Android

+0

那SO帖子的哪一部分? 我試了@Pete的答案,並做了與我的代碼一樣的事情,我很困惑如何使用onDraw?一旦添加視圖,不會在90度角顯示它嗎?我已經可以使用diff寬度高度添加一個新視圖,我需要在動畫期間更改此視圖的寬度和高度。 – 2014-10-21 21:30:14

+0

然後改變動畫後的高度和寬度。 – VicVu 2014-10-21 21:56:16

+0

你可以看到我在可運行之後嘗試這種方式,但是這會壓縮圖像。如果有一種方法我可以調整寬度和高度,並保持圖像顯示相同,那麼這就是解決方案(所有這一切都有點冒險) 知道我該怎麼做? – 2014-10-21 22:01:39

相關問題