1

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

1 回答 1

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() (链接)上的注释:

保存当前矩阵并剪辑到私有堆栈上。随后对 translate、scale、rotate、skew、concat 或 clipRect、clipPath 的调用都将照常运行,但是当对 restore() 进行平衡调用时,这些调用将被遗忘,并且在 save() 之前存在的设置将恢复。

于 2013-08-03T00:10:10.653 回答