1

閉じたパスがあり、1 つの色 (白) で塗りつぶし、その周りに別の色 (赤) のエッジを配置したいと考えています。Custom View クラスを使用すると、この目的を達成できると思いました。

public class StrokeFill extends View{
private Path shapePath;
private Paint strokePaint;
private Paint fillPaint;


public StrokeFill(Context context, Path path) {
    super(context);
    shapePath = path;
    fillPaint.setColor(android.graphics.Color.WHITE);
    fillPaint.setStyle(Paint.Style.FILL);
    fillPaint.setStrokeWidth(0);
    strokePaint.setColor(android.graphics.Color.RED);
    strokePaint.setStyle(Paint.Style.STROKE);
    strokePaint.setStrokeWidth(3);
    // TODO Auto-generated constructor stub
}

protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    //canvas.drawColor(Color.BLACK);
    super.onDraw(canvas);
    canvas.drawPath(shapePath, fillPaint);
    canvas.drawPath(shapePath, strokePaint);
}
}

私のメイン アクティビティでは、これを実行しました (XML レイアウト ファイルはありません)。

setContentView(new StrokeFill(this, testpath));

testpath は、アクティビティで定義したパスです。それを使ってPathShapeを定義すると描画できたので有効です。しかし、この場合、Eclipse からエラー java.lang.NullPointerException が返されます。XML レイアウトでカスタム ビューを定義しようとしましたが、それも機能しません。Android で図形を操作するのはこれまでのところ非常にイライラするものでした。

4

2 に答える 2

1

初期化の問題はこれを見てください

public class StrokeFill extends View{
    private Path shapePath;
    private Paint strokePaint;
    private Paint fillPaint;

    public StrokeFill(Context context, Path path) {
       super(context);
       shapePath = new Path();        
       shapePath = path;
       fillPaint = new Paint();
       fillPaint.setColor(android.graphics.Color.WHITE);
       fillPaint.setStyle(Paint.Style.FILL);
       fillPaint.setStrokeWidth(0);
       strokePaint = new Paint();
       strokePaint.setColor(android.graphics.Color.RED);
       strokePaint.setStyle(Paint.Style.STROKE);
       strokePaint.setStrokeWidth(3);
       // TODO Auto-generated constructor stub
    }

   protected void onDraw(Canvas canvas) {
      // TODO Auto-generated method stub
      //canvas.drawColor(Color.BLACK);
      super.onDraw(canvas);
      canvas.drawPath(shapePath, fillPaint);
      canvas.drawPath(shapePath, strokePaint);
  }
}
于 2012-07-10T17:03:33.383 に答える
0

コード内で strokePaint が初期化されることはありません...それは nullPointer ですか?

スタックへようこそ...有用な回答が見つかったら、それらに賛成票を投じてください...それらが正しいと思われる場合は、緑色のチェックマークを付けてください!

于 2012-07-10T16:44:47.773 に答える