2013-03-27 70 views
4

我一直在寻找很多,但我无法得到我的问题的解决方案。我希望应用在11版本与Android兼容的API我不能使用android:rotation。 我的问题是与此类似:Rotating a view in Android旋转ImageView及其没有裁剪的背景

我已经做到了这一点:

@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的,我放置图像和一些文本的一部分。

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

回答

0

尝试将您的ImageView添加为FrameLayout的子视图,并将FrameLayouts的宽度和高度设置为与ImageView相同。查看我的回答相似回答here。原帖由Pavlo Viazovskyy here转贴。希望这可以帮助!

+0

感谢您响应之前干净的解决方案,我终于做了一个小技巧,只是做一些尺度内拉伸:canvas.scale(0.9f,0.9f,d.getIntrinsicWidth()/ 2,d.getIntrinsicHeight()/ 2);但我会记住你的选择。 – nutshell 2013-05-10 16:54:12

7

您只需添加:

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

+1

您的剪辑的孩子没有工作在这里,而你300dp高度做了工作:\ – 2016-07-21 15:45:44

+0

您提供API等级<11测试它?因为答案明确指出,ii将提供较低API级别的解决方案 – Murmel 2016-09-07 10:42:10