旋转ImageView及其背景,无需裁剪

nut*_*ell 6 android imageview

我一直在搜索,但我无法解决我的问题.我无法使用,android:rotation因为我希望此应用与11版本的Android API兼容.我的问题与此类似:在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();
}
Run Code Online (Sandbox Code Playgroud)

ImageView是RelativeLayout的一部分,我放置图像和一些文本.

但是图像在边缘被裁剪.我怎么能避免这种情况?

Mur*_*mel 8

你只需要添加:

android:clipChildren="false"
Run Code Online (Sandbox Code Playgroud)

到了父母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>
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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


小智 0

尝试将 ImageView 添加为 FrameLayout 的子视图,并将 FrameLayouts 的宽度和高度设置为与 ImageView 相同。在这里查看我的类似答案。原始答案来自Pavlo Viazovskyy 的帖子。希望这可以帮助!