الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

رسم رسومات باستخدم surfaceview لمرة وحدة فقط

بدأه محمد فضل في 12 فبراير 2012 · 6 رد · 633 مشاهدة · في Android
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكنني ان ارسم اي رسومات لمرة واحدة فقط باستخدام surfaceview دون الحاجة الى تكرار تلك الرسومات مرة أخرى ؟؟

رب ارحمهما كما ربياني صغيرا

#2

وضح سؤالك اكثر

يتم الرسم باستدعاء onDraw

اذا اردت مرة واحدة اذا استدعها مرة واحدة

#3

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

رب ارحمهما كما ربياني صغيرا

#4

عمليا

جميع طريق الرسم المعتادة هي ان يتم اعادة رسم كل شيء في الشاشة (repaint في الجافا)

مثلا لفرض انك تريد رسم خلفية صورة دائما و رسم فوقها كلمة مرحبا

فما عليك الا رسم الصورة في بداية كود onDraw و رسم النص فوقها

السؤال: هل سيتم اعادة رسم الصورة بما انها ثابتة ؟

الجواب: نعم عليك باعادة رسمها كل مرة و ذلك ليس بخطأ.

---

لتزيد من فعالية الموضوع

حاول ان تباعد بين كل عملية رسم و الاخرى

اذا كنت تستخدم Thread استدعي

Thread.sleep(50);

حيث ال 50 ملل ثانية كل ما زدت الرقم، كلما باعدت بين الرسم و الاخرى

#5

فلنتفق أننا سوف نرسم كل الرسومات مرارا وتكرارا فهل هذه الرسومات سوف ترسم فوق بعضها البعض أن أنها سوف ترسم لمرة واحدة فقط في ذات المكان ؟

سؤال آخر .. أنا أستخدم

thread.sleep() ;

ولكن حينما يكون عدد الثواني صغير جدا .. أقل من 100 ميلي ثانية مثلا ً تظهر بعض الرسومات في الشاشة التي تومض وتنطفئ ..

رب ارحمهما كما ربياني صغيرا

#6
محمد فضل كتب:

فلنتفق أننا سوف نرسم كل الرسومات مرارا وتكرارا فهل هذه الرسومات سوف ترسم فوق بعضها البعض أن أنها سوف ترسم لمرة واحدة فقط في ذات المكان ؟

سؤال آخر .. أنا أستخدم

ممم

عند استدعائك لل onDraw اغلب المبرمجين يقوم بطمس الرسومات السابقة برسم مربع على حجم الرسم المراد بلون معين، لنفرض اللون الاسود

ال Cavas عبارة عن لوحة رسم عادية، تقوم بالرسم عليها مثلما شئت

thread.sleep() ;

ولكن حينما يكون عدد الثواني صغير جدا .. أقل من 100 ميلي ثانية مثلا ً تظهر بعض الرسومات في الشاشة التي تومض وتنطفئ ..

قد يكون عندك خطأ بالكود في الرسم مثلا Boolean تقوم بالتأكد منه كل مرة

او انك تستخدم ArrayList تحتوي على عناصر للرسم و تحذف منها كل عنصر ترسمه

هذه الامور قد تأخر من عملية الرسم

تم تعديل هذه المشاركة بواسطة .S.T.A.L.K.E.R في 12 فبراير 2012 في 02:50

#7
public boolean onTouch(View v, MotionEvent event) {

		float xPosition, yPosition;

		xPosition = event.getX();
		yPosition = event.getY();

		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			if (yPosition < object.getHeight() - 60) {
				startX = xPosition;
				startY = yPosition;
				myPath.moveTo(startX, startY);
			} else {
				if (xPosition > 0 && xPosition < saveIcon.getWidth()) {
					this.setTitle("save");
				} else if (xPosition > object.getWidth()
						- deleteIcon.getWidth()) {
					this.setTitle("delete");
				}
			}

			break;

		case MotionEvent.ACTION_MOVE:
			if (yPosition < object.getHeight() - 60) {

				finalX = xPosition;
				finalY = yPosition;
				if (finalX != startX && finalY != startY) {

					myPath.quadTo(startX, startY, finalX, finalY);
				}
				startX = finalX;
				startY = finalY;

				break;
			}
		}

		return true;
	}

public void run() {
			// TODO Auto-generated method stub

			while (canIDraw) {

				if (!myHolder.getSurface().isValid()) {
					continue;
				}


				myCanvas = myHolder.lockCanvas();
				drawMyBasicShapes();
				myCanvas.drawPath(myPath, myPaint);

				myHolder.unlockCanvasAndPost(myCanvas);

			}
		}

لقد القيت نظرة على الكود مرة أخرى ولم استطع أن أعرف أصل المشكلة ..

رب ارحمهما كما ربياني صغيرا

مواضيع مشابهة