1

編集:

OK、ビューの長さと幅を画面の大部分に拡張しました onDraw() メソッドはビューの制限を取り込んでいないと想定できます。仮定する。では、ここでの問題は、ビューの制限を尊重するようにキャンバスに指示する方法でしょうか? いくつかのパラメーターを強制する可能性がありますか?

編集の終わり

カスタム ビューを描画するためのコードを実装しましたが、キャンバスが空白です。ログトレースを追加したので、実行されていると確信しており、それらは問題なく表示されています。

カスタム ビューの描画を適切に実装するにはどうすればよいですか? また、以下で実行したことの何が問題なのですか?

次のようなレイアウトの中に入る私のカスタム ビュー:

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1" android:layout_height="fill_parent"
android:layout_width="fill_parent">

<pis.core.JMI_VistaMenuIn android:layout_height="150dip" android:layout_width="150dip" android:layout_alignParentTop="true" android:id="@+id/viewAnd01" ></pis.core.JMI_VistaMenuIn>

<Button android:layout_width="wrap_content" android:id="@+id/btnJugar" android:layout_height="wrap_content" android:text="Jugar" android:layout_below="@+id/viewAnd01" android:layout_alignLeft="@+id/viewAnd01" android:layout_alignRight="@+id/viewAnd01"></Button>

</RelativeLayout> 

customview は、pis.core.JMI_VistaMenuIn という名前のビューです。プレビューでは「java.lang.UnsupportedOperationException」が発生しましたが、.apk が読み込まれると xml レイアウトが機能します。

これが私のカスタムビューのコードです。前に言ったように、ロギングを含む行がヒットしていますが、キャンバスは空白です:

public class JMI_VistaMenuIn extends View {

public static final String QUOTE = "Mind Logic+";

public Animation anim;

//Default constructors

public void createAnim(Canvas canvas) {
    Log.i("SC", "Exe canvas 01");
    anim = new RotateAnimation(0, 360, canvas.getWidth() / 2, canvas
            .getHeight() / 2);
    anim.setRepeatMode(Animation.REVERSE);
    anim.setRepeatCount(Animation.INFINITE);
    anim.setDuration(10000L);
    anim.setInterpolator(new AccelerateDecelerateInterpolator());

    startAnimation(anim);
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    // creates the animation the first time
    if (anim == null) {
        createAnim(canvas);
    }

    Path circle = new Path();

    int centerX = canvas.getWidth() / 2;
    int centerY = canvas.getHeight() / 2;
    int r = Math.min(centerX, centerY);

    circle.addCircle(centerX, centerY, r, Direction.CW);
    Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    paint.setTextSize(30);
    paint.setAntiAlias(true);

    canvas.drawTextOnPath(QUOTE, circle, 0, 30, paint);
    Log.i("SC", "Exe canvas 02");
}
}
4

1 に答える 1

0

アニメーションを含め、同様のコードは私にとってはうまく機能します。コードの別の場所に別の問題があります。ペイント スタイルを設定してみてください。

Paint paint = new Paint();
    paint.setColor(Color.BLUE);
    paint.setTextSize(30);
    paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
于 2011-07-13T23:42:59.993 に答える