วาดเส้นประบนผืนผ้าใบ

ฉันจะวาดเส้นประบนผืนผ้าใบได้อย่างไร ฉันลองสิ่งนี้แล้ว:

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

และมันทำให้ฉันไม่ใช่เส้นประ แต่เป็นเส้นเรียบง่าย


person Procurares    schedule 13.05.2013    source แหล่งที่มา
comment
ฉันได้เขียนมุมมองที่วาดเส้นประ คุณสามารถดูรายละเอียดได้ที่นี่   -  person ruidge    schedule 21.11.2013


คำตอบ (1)


คุณกำลังวาดเส้น ตามเอกสารประกอบ ฟังก์ชัน 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);
        }
    }
}

ปรับเปลี่ยนข้างต้นตามความต้องการของคุณ

person Raghunandan    schedule 13.05.2013