gpt4 book ai didi

android - 从 Android 中的中心点缩放位图以实现放大效果

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:51 26 4
gpt4 key购买 nike

我试图在 Android 中从其中心点放大位图以实现缩放效果,但没有成功。我的代码是:

float scaleWidth = ((float) width + (i * 5)) / width;
float scaleHeight = ((float) height + (i * 5)) / height;

Matrix matrix = new Matrix();
matrix.setScale(scaleWidth, scaleHeight, scaleWidth / 2, scaleHeight / 2);
Bitmap rescaledBitmap = Bitmap.createBitmap(src, 0, 0, width, height, matrix, true);

result.add(rescaledBitmap);

我通过将尺寸除以 2 来设置枢轴点,但效果只是图像从 0 缩放,0 作为坐标而不是从中心缩放。我想要的是将图像设置为固定大小,但从其中心点按比例放大(从而裁剪图像)。

最佳答案

我将提供一个使用属性动画器的替代解决方案,因为我认为这是一个更简洁的解决方案。

SomeLayout.xml(这里的关键是 ViewGroup 与 View 的大小相同,因此它会根据您的要求进行裁剪(如谷歌地图放大))

<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 的 zoom + 和 zoom - View ,您基本上可以模拟受控缩放,只要您知道要缩放的值。

另外如前所述,与内部 View 大小相同的 ViewGroup 将强制动画剪裁到其父边界,而不是完全可见。

引用资料:

Google Android ObjectAnimator

关于android - 从 Android 中的中心点缩放位图以实现放大效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19007651/

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