0

画面の座標を見つけるにはどうすればよいですか? たとえば、電話の解像度は 960 x 540 ですが、エミュレーターでは、その解像度で図形を描画すると、エッジの一部が塗りつぶされません。これを回避する方法はありますか?

四角形の色については、2 つの四角形があり、drawPaint に 2 つの別々の色を指定しているにもかかわらず、そのうちの 2 つが同じ色であることがわかります。drawPaint2 などの新しい変数を設定するだけでエラーが返されます。両方の色を変更するにはどうすればよいですか?

キャンバスでパス機能を使用する方法。たとえば、三角形を描くには?コードに試行を含めましたが、三角形が表示されません。

    public class DrawView extends View implements OnTouchListener
{

    private Paint backgroundPaint = new Paint();
    private Paint drawPaint = new Paint();
    private Paint circlePaint = new Paint();
    private Paint textPaint = new Paint();
    private Paint path = new Paint();
    private float sx, sy;

    public DrawView(Context context)
    {
        super(context);         

        setFocusable(true);
        setFocusableInTouchMode(true);

        backgroundPaint.setColor(Color.CYAN);
        backgroundPaint.setAntiAlias(true);
        backgroundPaint.setStyle(Style.FILL);

        drawPaint.setColor(Color.WHITE);
        drawPaint.setStyle(Style.FILL);

        circlePaint.setColor(Color.DKGRAY);
        circlePaint.setStyle(Style.FILL);

        textPaint.setColor(Color.WHITE);
        textPaint.setStyle(Style.FILL);

        drawPaint.setColor(Color.GREEN);
        drawPaint.setStyle(Style.FILL);

        circlePaint.setColor(Color.RED);
        circlePaint.setStyle(Style.FILL);

        path.setColor(android.graphics.Color.RED);
        path.setStyle(Paint.Style.FILL);            
        Path path = new Path();
        path.moveTo(1, 1);
        path.lineTo(20, 50);
        path.moveTo(20, 50);
        path.lineTo(100, 100);
        path.moveTo(100, 100);
        path.lineTo(1, 1);
        path.close();

        this.setOnTouchListener(this);
    }

    @Override
    public void onDraw(Canvas canvas)
    {

        //canvas.drawPath(path, paint); <-- error

        // to draw background
        canvas.drawRect(this.getLeft(), this.getTop(), this.getRight(), this.getBottom(), backgroundPaint);

        //to draw two rectangle with blue and green paint
        canvas.drawRect(100,100, 340,540, drawPaint); 
        canvas.drawRect(00,00, 120,80, drawPaint); 

        //draw text with paint
        canvas.drawText("Hello Dear Leader!", 110, 160, textPaint);

        //draw a circle with green paint with the touch coordinates
        canvas.drawCircle(sx-30,sy-30, 30, circlePaint);

        //draw a circle with red paint with the touch coordinates
        canvas.drawCircle(sx-80, sy-80, 10, circlePaint);

    }

    public boolean onTouch(View v, MotionEvent event)
    {   
        //update the coordinates for the OnDraw method above, with wherever we touch
        sx = event.getX();
        sy = event.getY();

        invalidate();
        return true;
    }

}
4

1 に答える 1

0

サイズについては、簡単に呼び出すことができcanvas.getWidth()canvas.getHeight()すべての値をそれらのパーセンテージで実行できます。定数を想定しないでください!

2つの異なる色を使用するには、2つの別々のペイントを使用する必要があります。また、各ペイントは初期化が必要なオブジェクトであることを忘れないでください。

// objects
private Paint drawPaint_WH = new Paint();
private Paint drawPaint_GR = new Paint();

// during construction
drawPaint_WH.setColor(Color.WHITE);
drawPaint_WH.setStyle(Style.FILL);

drawPaint_GR.setColor(Color. GREEN);
drawPaint_GR.setStyle(Style.FILL);

// and then during draw()
canvas.drawRect(100,100, 340,540, drawPaint_WH); 
canvas.drawRect(0,0, 120,80, drawPaint_GR); 

次に三角形を作成するには:

// object
private Path trianglePath;

// during construction
trianglePath = new Path();
trianglePath.moveTo(10, 10); // starting point
trianglePath.lineTo(10, 50); // 1st vertix
trianglePath.lineTo(50, 10); // 2nd vertix
trianglePath.lineTo(10, 10); // 3rd vertix and close

// then during draw()
canvas.drawPath(trianglePath, drawPaint_GR) // or whatever paint you want

ps.:呼び出しやすい背景に色を付けてくださいcanvas.drawColor(int colorVal);

于 2013-02-19T13:28:31.427 に答える