我将提供使用属性动画师的替代解决方案,因为我认为这是一个更清洁的解决方案。
SomeLayout.xml (这里的关键是 ViewGroup 与 View 大小相同,因此它会按照您的要求进行剪辑(如 google maps 放大))
<FrameLayout
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center">
<View
android:id="@+id/zoom"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/myCoolImage"
/>
</FrameLayout>
代码:(1、2、1 将以 1x 的比例开始,然后是 2x,然后回到 1x,它需要一个值列表)
final View view = findViewById(R.id.zoom);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final ObjectAnimator animator = ObjectAnimator.ofFloat(view, View.SCALE_X, 1, 2, 1)
.ofFloat(view, View.SCALE_Y, 1, 2, 1)
.setDuration(5000);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.start();
}
});
因此,使用此版本图像,如果您有缩放 + 和缩放 - 带有 onClickListeners 的视图,您基本上可以模拟受控缩放,只要您知道要缩放的值。
同样如前所述,与内部视图大小相同的 ViewGroup 将强制动画剪辑到其父边界,而不是完全可见。
参考:
谷歌 Android ObjectAnimator