我已经进行了很多搜索,但是无法为我的问题找到解决方案。我无法使用android:rotation,因为我希望该应用与11版以下的Android API兼容。
我的问题是这样的: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>

RotateImageView:
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级别11之前提供了一个干净的解决方案

10-07 19:49
查看更多