キャンバスに破線を描画する方法を教えてください。私はすでにこれを試しました:
Paint dashPaint = new Paint();
dashPaint.setARGB(255, 0, 0, 0);
dashPaint.setStyle(Paint.Style.STROKE);
dashPaint.setPathEffect(new DashPathEffect(new float[]{5, 10, 15, 20}, 0));
canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint);
そして、それは私に破線ではなく単純なものを与えました。
あなたは線を描いています ドキュメントに従って 、drawLine関数は:
指定されたペイントを使用して、指定された始点と終点のX、Y座標で線分を描画します。
線は常に「フレーム化」されるため、スタイルはペイントでは無視されます。
縮退した線(長さが0)は描画されません。
canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint)
破線を描画するには、 Path プリミティブを使用することをお勧めします
private Path mPath;
mPath = new Path();
mPath.moveTo(0, h / 2);
mPath.quadTo(w/2, h/2, w, h/2);
// h and w are height and width of the screen
Paint mPaint = new Paint();
mPaint.setARGB(255, 0, 0, 0);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setPathEffect(new DashPathEffect(new float[]{5, 10, 15, 20}, 0));
OnDraw()内
canvas.drawPath(mPath, mPaint);
スナップショット
背景があり、それを破線で描きました。
例
public class FingerPaintActivity extends Activity {
MyView mv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mv = new MyView(this);
setContentView(mv);
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(0xFFFF0000);
mPaint.setARGB(255, 0, 0, 0);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setPathEffect(new DashPathEffect(new float[]{10, 40,}, 0));
mPaint.setStrokeWidth(12);
}
private Paint mPaint;
public class MyView extends View {
private Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
Context context;
public MyView(Context c) {
super(c);
context = c;
mPath = new Path();
mBitmapPaint = new Paint(Paint.DITHER_FLAG);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mBitmap);
mPath.moveTo(0, h / 2);
mPath.quadTo(w / 2, h / 2, w, h / 2);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
canvas.drawPath(mPath, mPaint);
}
}
}
必要に応じて上記を変更してください。