سؤال

أحاول رسم الرسوم المتحركة. للقيام بذلك، قمت بإعادة عرض طريقة ONDRAW (). ما كنت أتوقعه هو أنه في كل مرة أوندرو () يسمى القماش سيكون في الولاية التي تركتها فيها، ويمكنني اختيار مسحها أو مجرد سحب أجزاء منه (هذا هو كيفية عمله عندما استخدمت ) ولكن في كل مرة يعود فيها القماش بالفعل. هل هناك طريقة لا أستطيع مسحها؟ أو ربما أحفظ الدولة السابقة في صورة نقطية حتى أتمكن من رسم تلك الصورة النقطية ثم رسمها فوقها؟

هل كانت مفيدة؟

المحلول

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

هنا كيف أفعل ذلك

class A extends View {

    private Canvas canvas;
    private Bitmap bitmap;

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        if (bitmap != null) {
            bitmap .recycle();
        }
        canvas= new Canvas();
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas.setBitmap(bitmap);
    }
    public void destroy() {
        if (bitmap != null) {
            bitmap.recycle();
        }
    }
    public void onDraw(Canvas c) {
      //draw onto the canvas if needed (maybe only the parts of animation that changed)
      canvas.drawRect(0,0,10,10,paint);

      //draw the bitmap to the real canvas c
      c.drawBitmap(bitmap, 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
          new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), null);
    }
}

نصائح أخرى

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

توقعاتك لا تنجب W / الواقع :) لن تكون القماش هي الطريقة التي تركتها، لكنها فارغة بدلا من ذلك. يمكنك إنشاء قائمة صفيف من الكائنات المراد رسمها (Canvas.drawcircle ()، canvas.drawbitmap () إلخ)، ثم تكرار على الرغم من أن القوائم في OnDraw (). أنا جديد في برمجة الرسومات ولكني استخدمت هذا على نطاق صغير. ربما هناك طريقة أفضل بكثير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top