سؤال

أقوم بعمل تطبيق يجب أن أكون قادرًا على رسم رسومات جديدة أعلى المجموعة الأخيرة.

هذه طريقة OnDraw () الحالية -

protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.WHITE);

    if(points.size() > 0) {
        //do some stuff here - this is all working ok
        canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    }   
}

في الأساس ، أحتاج إلى رسم الرسومات الجديدة كطبقة أعلى الأخير ، لذا فإن ما أبحث عنه هو وسيلة لنقل صورة القماش الأخير إلى التيار.

لقد حاولت معرفة ذلك بنفسي باستخدام طريقة canvas.setbitmap () ولكنها تعمل مضحكة للغاية.

أي مساعدة موضع تقدير :)

ملاحظة إذا لزم الأمر ، يمتد الفصل SurfaceView وتنفذ SurfaceHolder.Callback

تحرير: هذا ما جربته في طريقة OnDraw () ولكنه يتم إغلاق القوة فقط

if(bitmap != null) {
        canvas.drawBitmap(bitmap, 0, 0, paint);
        canvas.setBitmap(bitmap);  
    }
هل كانت مفيدة؟

المحلول

وجدت الجواب بنفسي :)

@Override
protected void onDraw(Canvas c) {

if(bitmap != null && canvas != null) { 
    canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    c.drawBitmap(bitmap, 0, 0, linePaint);  
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
}

يعمل تمامًا كما هو مقصود ، فهو يخلق تأثير الرسم فوق اللوحة القديمة بشكل مستمر

نصائح أخرى

سيتعين عليك تخزين الصورة السابقة باستمرار على قائمة ArrayList ، وخلال Ondraw ، حلقة من خلال قائمة ArrayList لإعادة رسم جميع العناصر.

شيء من هذا القبيل:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top