Android 扩展线性布局不旋转

Android 扩展线性布局不旋转,android,layout,rotation,Android,Layout,Rotation,我正在尝试创建一个自定义的LinearLayout,它可以按设置的角度旋转布局中的所有子项。也就是说,我希望旋转整个画布和子对象,而不是单独旋转子对象 我需要支持API级别10,因此API级别11中引入的android:rotate在这里对我没有帮助 我一直在环顾四周,认为我需要按照下面这段代码的思路做一些事情,但是这段代码没有任何东西可以旋转 你知道我遗漏了什么吗 public class RotationLayout extends LinearLayout { public Ro

我正在尝试创建一个自定义的
LinearLayout
,它可以按设置的角度旋转布局中的所有子项。也就是说,我希望旋转整个画布和子对象,而不是单独旋转子对象

我需要支持
API级别10
,因此
API级别11
中引入的
android:rotate
在这里对我没有帮助

我一直在环顾四周,认为我需要按照下面这段代码的思路做一些事情,但是这段代码没有任何东西可以旋转

你知道我遗漏了什么吗

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();
}
}`

我尝试了你的代码,做了一些修改

在activity类的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()上的注释中:

保存当前矩阵并将其剪辑到专用堆栈上。后来的 调用translate、scale、rotate、skew、concat或clipRect、clipPath将 所有操作都像往常一样,但是当对restore()的平衡调用 发出时,这些呼叫将被忘记,并且已存在的设置也将被忘记 将恢复save()之前


我尝试了你的代码,做了一些修改

在activity类的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()上的注释中:

保存当前矩阵并将其剪辑到专用堆栈上。后来的 调用translate、scale、rotate、skew、concat或clipRect、clipPath将 所有操作都像往常一样,但是当对restore()的平衡调用 发出时,这些呼叫将被忘记,并且已存在的设置也将被忘记 将恢复save()之前


您正在调用canvas.restore()?这不会撤销
canvas.rotate()
所做的吗?覆盖draw(canvas)而不是onDraw(canvas)尝试了你的两个建议,没有运气:-(你正在调用
canvas.restore()
?这不会撤销
canvas.rotate()
所做的吗?覆盖draw(canvas)而不是onDraw(canvas)尝试了你的两个建议,没有运气:-(非常感谢你的时间vikram,这正是我需要的!非常感谢你的时间vikram,这正是我需要的!