我正在尝试创建一个自定义LinearLayout
,可以按设定角度旋转布局中的所有子项。也就是说,我想要整个画布和旋转孩子,而不是单独旋转孩子。
我需要支持API Level 10
,因此android:rotate
中引入的API Level 11
对我不起作用。
我一直在环顾四周,认为我需要按照下面这段代码的方式做一些事情,但是这个代码没有任何东西可以旋转。
关于我在这里缺少什么的想法?
public class RotationLayout extends LinearLayout {
public RotationLayout(Context context) {
super(context);
init();
}
public RotationLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RotationLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.save();
canvas.rotate(350,0,0);
super.onDraw(canvas);
canvas.restore();
}
}`
答案 0 :(得分:1)
我通过一些更改尝试了您的代码。
在活动类的onCreate(Bundle)中,我初始化了RotationLayout:
RotationLayout rl = new RotationLayout(this);
ImageView iv = new ImageView(this);
iv.setImageDrawable(getResources().getDrawable(R.drawable.some_drawable));
rl.addView(iv);
setContentView(rl);
视图确实围绕(0,0)旋转了350度(或逆时针10度)。这就是我改变的地方:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.rotate(350,0,0);
}
来自Canvas.save()
(Link)的说明:
将当前矩阵和剪辑保存到专用堆栈。随后 调用translate,scale,rotate,skew,concat或clipRect,clipPath会 所有操作都像往常一样,但是当对restore()进行平衡调用时 制作,这些电话将被遗忘,以及存在的设置 在恢复save()之前。