Мне нужно повернуть ImageView с помощью анимации, чтобы изменить и ширину и высоту ImageView.Как поворачивать ImageView, а не только изображение, программно
Я попытался использовать ViewPropertyAnimator, используя View.animate, но это просто поворачивает изображение, а не сам фактический вид.
Мне нужно использовать это, чтобы я мог обработать координаты x и y вида после его поворота, а также ширину и высоту.
Я сделал тестовое приложение, чтобы просто повернуть изображение карты, и я сделал снимки с видимыми макетами, чтобы показать, что я имею в виду.
Как вы можете видеть в коде, я также попытался заставить изменить ширину и высоту в runnable после завершения анимации, но это не сработает. Также не использует scaleX/scaleY, чтобы попытаться изменить ситуацию.
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);
}
}
Какая часть этого SO сообщения? Я пробовал ответить @Pete и сделал то же самое, что и мой код, и я смущен тем, как использовать onDraw? Не будет ли это отображаться под углом 90 градусов, как только будет добавлено представление? Я уже могу добавить новое представление с шириной ширины разницы, мне нужно изменить ширину и высоту этого представления во время анимации. –
Затем измените высоту и ширину после анимации. – VicVu
Вы можете видеть, что я пробую это в runnable после, однако это squash изображение. Если есть способ, я могу настроить ширину и высоту и оставить изображение одинаковым, то это решение (все это немного хаки) Знаете, как я могу это сделать? –