2014-10-21 2 views
0

Мне нужно повернуть ImageView с помощью анимации, чтобы изменить и ширину и высоту ImageView.Как поворачивать ImageView, а не только изображение, программно

Я попытался использовать ViewPropertyAnimator, используя View.animate, но это просто поворачивает изображение, а не сам фактический вид.

Мне нужно использовать это, чтобы я мог обработать координаты x и y вида после его поворота, а также ширину и высоту.

Я сделал тестовое приложение, чтобы просто повернуть изображение карты, и я сделал снимки с видимыми макетами, чтобы показать, что я имею в виду.

Как вы можете видеть в коде, я также попытался заставить изменить ширину и высоту в runnable после завершения анимации, но это не сработает. Также не использует 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 градусов, как только будет добавлено представление? Я уже могу добавить новое представление с шириной ширины разницы, мне нужно изменить ширину и высоту этого представления во время анимации. –

+0

Затем измените высоту и ширину после анимации. – VicVu

+0

Вы можете видеть, что я пробую это в runnable после, однако это squash изображение. Если есть способ, я могу настроить ширину и высоту и оставить изображение одинаковым, то это решение (все это немного хаки) Знаете, как я могу это сделать? –

Смежные вопросы