Как программно повернуть 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);

}

}


person Russ Wheeler    schedule 21.10.2014    source источник


Ответы (1)


Тогда вам следует вращать вид, а не изображение.

Поворот представления в Android

person VicVu    schedule 21.10.2014
comment
Какая часть этого поста SO? Я попробовал ответить @Pete, и он сделал то же самое, что и мой код, и я не понимаю, как использовать onDraw? Разве это не отобразит его под углом 90 градусов, как только вид будет добавлен? Я уже могу добавить новый вид с разницей в ширину и высоту, мне нужно изменить ширину и высоту этого вида во время анимации. - person Russ Wheeler; 22.10.2014
comment
Затем измените высоту и ширину после анимации. - person VicVu; 22.10.2014
comment
Вы можете видеть, что я пробую это в runnable after, однако это сжимает изображение. Если есть способ отрегулировать ширину и высоту и оставить изображение таким же, то это решение (все это может быть немного хакерским). Знаете, как я могу это сделать? - person Russ Wheeler; 22.10.2014