1

LinearLayoutレイアウト内のすべての子を設定角度で回転できるカスタムを作成しようとしています。つまり、子を個別に回転させるのではなく、キャンバス全体と子を回転させたいのです。

をサポートする必要があるためAPI Level 10android: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 に答える