Как да завъртите 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 след това, но това смачква изображението. Ако има начин да регулирам ширината и височината и да оставя изображението да изглежда същото, тогава това е решението (всичко е малко хакерско) Знаете ли как мога да направя това? - person Russ Wheeler; 22.10.2014