旋转 ImageView 及其背景而不裁剪

2024-04-29

我已经进行了很多搜索,但找不到解决我的问题的方法。我不能使用android:rotation因为我希望这个应用程序与 Android API 11 版本兼容。 我的问题与此类似:在 Android 中旋转视图 https://stackoverflow.com/questions/1930963/rotating-a-view-in-android

我已经这样做了:

@Override
public void draw(Canvas canvas) {
    canvas.save();
    Drawable d = getDrawable();
    canvas.rotate(-10, d.getIntrinsicWidth() / 2, d.getIntrinsicHeight() / 2);
    super.draw(canvas);
    canvas.restore();
}

ImageView 是RelativeLayout 的一部分,我在其中放置图像和一些文本。

但图像的边缘被裁剪了。我怎样才能避免这种情况?


您只需添加:

android:clipChildren="false"

给家长ViewGroup.

例如:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    android:layout_width="300dp"
    android:layout_height="300dp"
    android:clipChildren="false">
    <com.yourcompany.views.RotateImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="@android:color/white"
        android:src="@drawable/ic_launcher" />
</FrameLayout>

旋转图像视图:

public class RotateImageView extends ImageView {
    @Override
    public void draw(Canvas canvas) {
         canvas.save();
         int height = canvas.getHeight();
         int width = canvas.getWidth();
         canvas.rotate(45, height / 2, width / 2);
         super.draw(canvas);
         canvas.restore();
    }
}

在 API Level 11 之前提供了一个干净的解决方案

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

旋转 ImageView 及其背景而不裁剪 的相关文章

随机推荐