Gambar garis putus-putus pada Kanvas

Bagaimana cara menggambar garis putus-putus di kanvas. Saya sudah mencoba ini:

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);

Dan itu memberi saya bukan garis putus-putus, melainkan garis sederhana.


person Procurares    schedule 13.05.2013    source sumber
comment
Saya telah menulis tampilan yang menggambar garis putus-putus. Anda dapat melihat detailnya di sini   -  person ruidge    schedule 21.11.2013


Jawaban (1)


Anda sedang menggambar garis, sesuai dokumentasi, fungsi drawLine akan:

Gambarlah ruas garis dengan koordinat awal dan akhir x,y yang ditentukan, menggunakan cat yang ditentukan.

Perhatikan bahwa karena garis selalu dibingkai, Style diabaikan dalam cat.

Garis yang merosot (panjangnya 0) tidak akan digambar.

 canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint) 

Untuk menggambar garis putus-putus, sarannya adalah menggunakan primitif 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));

Di onDraw()

       canvas.drawPath(mPath, mPaint); 

Tembakan cepat

masukkan deskripsi gambar di sini

Saya memiliki latar belakang dan garis putus-putus yang digambar di atasnya.

Contoh

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);
        }
    }
}

Ubah yang di atas sesuai dengan kebutuhan Anda.

person Raghunandan    schedule 13.05.2013