gpt4 book ai didi

android - 如何使 android 中的偏心旋转动画在纵向和横向上看起来相似?

转载 作者:行者123 更新时间:2023-11-30 04:22:19 31 4
gpt4 key购买 nike

我有一个屏幕,上面有几张图片,其中一张有一个简洁的动画,纵向看起来很棒。

很棒的纵向动画 - rotate_anim_port.png - 在 HERE

它在风景中看起来并不那么棒。

横向动画 - rotate_anim_land.png - 在上面。

我正在以这种方式实现偏心旋转动画,因为我有几个具有相同大小的可绘制资源的 imageview 在 frameview 中堆叠在一起,以使它们都保持在相对相同的位置,但能够缩放到任何大小frameview 是。

它看起来很糟糕,因为 RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue) 基于其 pivotValues 的 View 与 View 内的图像大小不同.在纵向模式下,图像几乎与 View 大小相同,但在横向模式下差异很明显。

我一直在尝试并未能从 View 和其中绘制的图像中获取位置,以用于计算正确的 pivotValues 以传递代码。

这是 Activity 的代码:

package com.namespace;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.Animation;
import android.view.animation.LinearInterpolator;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class AnimationDemoActivity extends Activity {

// piviotValues if the view is the exact size of the drawable.
final float pivotXType = 0.3280274656679151f;
final float pivotYValue = 0.5060137457044674f;

private Handler mHandler = new Handler();
ImageView outside, inside;
RotateAnimation anim, anim2;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

outside = (ImageView) findViewById(R.id.imageView1);
inside = (ImageView) findViewById(R.id.imageView2);

outside.setVisibility(ImageView.INVISIBLE);
inside.setVisibility(ImageView.INVISIBLE);

// somewhere in here, code to recalculate pivotValues to adjust for the
// size of the actual view the images are inside of

anim = new RotateAnimation(0, 359, Animation.RELATIVE_TO_SELF,
pivotXType, Animation.RELATIVE_TO_SELF, pivotYValue);
anim.setInterpolator(new LinearInterpolator());
anim.setRepeatCount(Animation.INFINITE);
anim.setDuration(2000);

anim2 = new RotateAnimation(0, 359, Animation.RELATIVE_TO_SELF,
pivotXType, Animation.RELATIVE_TO_SELF, pivotYValue);
anim2.setInterpolator(new LinearInterpolator());
anim2.setRepeatCount(Animation.INFINITE);
anim2.setDuration(750);

mHandler.postDelayed(doRotation, 2500);
}

private Runnable doRotation = new Runnable() {
public void run() {
outside.setVisibility(ImageView.VISIBLE);
inside.setVisibility(ImageView.VISIBLE);
outside.startAnimation(anim);
inside.startAnimation(anim2);
}
};
}

这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:orientation="vertical"
android:padding="10sp" >

<ImageSwitcher
android:id="@+id/imageSwitcher1"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" >
</ImageSwitcher>

<ImageSwitcher
android:id="@+id/imageSwitcher2"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" >
</ImageSwitcher>

<FrameLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:gravity="center" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dwdg_outside_arrow" >
</ImageView>

<ImageView
android:id="@+id/imageView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/dwdg_inside_arrow" >
</ImageView>
</FrameLayout>

</LinearLayout>

Here是可运行的 apk - AnimationDemo.apk 和压缩项目 - AnimationDemo.zip

我这样做是不是疯了?我完全忽略了什么吗?做什么?

最佳答案

我想通了。当然,这是一行修复。将属性 android:adjustViewBounds="true" 添加到 ImageViews 使 View 缩小到可绘制资源的大小并使动画正常工作。

关于android - 如何使 android 中的偏心旋转动画在纵向和横向上看起来相似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9087265/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com