扩展LinearLayout不旋转

时间:2013-08-02 09:48:17

标签: android layout rotation

我正在尝试创建一个自定义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();
}
}`

1 个答案:

答案 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()之前。