Reputation: 113
I've been searching a lot, but I can't get a solution for my problem. I can't use android:rotation
as I want this app to be compatible with Android API under 11 version.
My problem is something similar to this: Rotating a view in Android
I've done this:
@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();
}
The ImageView is part of a RelativeLayout where I place the image and some text.
But the image is cropped in the edges. How can I avoid that?
Upvotes: 7
Views: 2174
Reputation: 5702
You simply have to add:
android:clipChildren="false"
to the parent ViewGroup
.
For Example:
<?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();
}
}
Which provides a clean solution before API Level 11
Upvotes: 8
Reputation: 21
Try adding your ImageView as a child view of a FrameLayout and set the FrameLayouts width and height the same as that of your ImageView. View my similar answer here. Original answer relayed from a post by Pavlo Viazovskyy here. Hope this helps!
Upvotes: 0