คำถามติดแท็ก android-canvas

Android Java Canvas (android.graphics.Canvas)

10
ข้อความของศูนย์ Android บนแคนวาส
ฉันกำลังพยายามแสดงข้อความโดยใช้รหัสด้านล่าง ปัญหาคือข้อความไม่อยู่กึ่งกลางแนวนอน เมื่อฉันตั้งค่าพิกัดdrawTextมันจะตั้งค่าด้านล่างของข้อความที่ตำแหน่งนี้ ฉันต้องการให้วาดข้อความเพื่อให้ข้อความอยู่กึ่งกลางในแนวนอน นี่เป็นภาพเพื่อแสดงปัญหาของฉันเพิ่มเติม: @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); //canvas.drawRGB(2, 2, 200); Paint textPaint = new Paint(); textPaint.setARGB(200, 254, 0, 0); textPaint.setTextAlign(Align.CENTER); textPaint.setTypeface(font); textPaint.setTextSize(300); canvas.drawText("Hello", canvas.getWidth()/2, canvas.getHeight()/2 , textPaint); }

8
การวัดความสูงของข้อความที่จะวาดบน Canvas (Android)
วิธีใดตรงไปตรงมาในการวัดความสูงของข้อความ? วิธีที่ฉันทำตอนนี้คือการใช้ Paint measureText()เพื่อรับความกว้างจากนั้นลองผิดลองถูกเพื่อหาค่าเพื่อให้ได้ความสูงโดยประมาณ ฉันก็ยุ่งอยู่FontMetricsเหมือนกัน แต่ทั้งหมดนี้ดูเหมือนวิธีการโดยประมาณที่ดูด ฉันพยายามปรับขนาดของสิ่งต่างๆเพื่อความละเอียดที่แตกต่างกัน ฉันทำได้ แต่จบลงด้วยรหัส verbose อย่างไม่น่าเชื่อพร้อมการคำนวณจำนวนมากเพื่อกำหนดขนาดสัมพัทธ์ ฉันเกลียดมัน! จะต้องมีวิธีที่ดีกว่านี้


16
วาดข้อความหลายบรรทัดลงใน Canvas
หวังว่าจะเป็นคำถามสั้น ๆ แต่ดูเหมือนจะไม่พบตัวอย่างใด ๆ ... ฉันต้องการเขียนข้อความหลายบรรทัดเป็นแบบกำหนดเองViewผ่าน a CanvasและในonDraw()ฉันมี: ... String text = "This is\nmulti-line\ntext"; canvas.drawText(text, 100, 100, mTextPaint); ... ฉันหวังว่าสิ่งนี้จะส่งผลให้เกิดการแบ่งบรรทัด แต่ฉันกลับเห็นอักขระที่คลุมเครือว่า\nจะเป็นอย่างไร คำแนะนำใด ๆ ที่ชื่นชม พอล

3
ทำความเข้าใจเกี่ยวกับแนวคิด Canvas และ Surface
ฉันกำลังดิ้นรนเพื่อทำความเข้าใจกระบวนการวาดภาพSurfaceViewและดังนั้นทั้งSurface/ Canvas/ Bitmapระบบซึ่งใช้ใน Android ฉันได้อ่านบทความและหน้าเอกสาร API ทั้งหมดซึ่งฉันสามารถหาได้ในไซต์สำหรับนักพัฒนาแอนดรอยด์, บทแนะนำเกี่ยวกับกราฟิก Android, ซอร์สโค้ด LunarLander และคำถามนี้ โปรดบอกฉันว่าข้อความใดเป็นจริงข้อใดไม่ใช่และเพราะเหตุใด CanvasมีของตัวเองBitmapติดอยู่ SurfaceมีของตัวเองCanvasติดอยู่ ทั้งหมดViewเป็นของส่วนแบ่งหน้าต่างเดียวกันและทำให้แบ่งปันเดียวกันSurfaceCanvas SurfaceViewเป็นคลาสย่อยViewซึ่งแตกต่างจากViewคลาสย่อยอื่น ๆและViewตัวมันเองมีของตัวเองที่Surfaceจะดึงเข้ามา นอกจากนี้ยังมีคำถามเพิ่มเติมอีกหนึ่งคำถาม: เหตุใดจึงจำเป็นต้องมีSurfaceคลาสหากมีCanvasการดำเนินการระดับสูงกับบิตแมปอยู่แล้ว ยกตัวอย่างสถานการณ์ที่Canvasไม่เหมาะสำหรับการทำงานที่Surfaceสามารถทำได้

6
วาดใน Canvas ด้วยนิ้วมือ Android
ฉันต้องการสร้างโครงการสำหรับวาดภาพบนผืนผ้าใบด้วยนิ้วมือ เพื่อรับเหตุการณ์สัมผัสและเหตุการณ์การเคลื่อนไหวของนิ้วของฉันจากนั้นจึงวาด มีใครสามารถแนะนำวิธีการเริ่มต้นโครงการ และองค์ประกอบที่ดีที่สุดในการทำสิ่งนี้คืออะไร?


7
ผ้าใบวาดรูปสี่เหลี่ยมผืนผ้าของ Android
วิธีการวาดสี่เหลี่ยมผืนผ้าว่างด้วย ฯลฯ borderWidth = 3 และ borderColor = สีดำและส่วนหนึ่งในสี่เหลี่ยมผืนผ้าไม่มีเนื้อหาหรือสี ฟังก์ชันใดใน Canvas ที่จะใช้ void drawRect(float left, float top, float right, float bottom, Paint paint) void drawRect(RectF rect, Paint paint) void drawRect(Rect r, Paint paint) ขอบคุณ. ผมลองดูตัวอย่างนี้ Paint myPaint = new Paint(); myPaint.setColor(Color.rgb(0, 0, 0)); myPaint.setStrokeWidth(10); c.drawRect(100, 100, 200, 200, myPaint); มันวาดสี่เหลี่ยมผืนผ้าและเติมด้วยสีดำ …


18
Android, canvas: ฉันจะล้าง (ลบเนื้อหาของ) canvas (= bitmaps) โดยอาศัยอยู่ใน surfaceView ได้อย่างไร
ในการสร้างเกมง่ายๆฉันใช้เทมเพลตที่วาดผืนผ้าใบด้วยบิตแมปดังนี้: private void doDraw(Canvas canvas) { for (int i=0;i<8;i++) for (int j=0;j<9;j++) for (int k=0;k<7;k++) { canvas.drawBitmap(mBits[allBits[i][j][k]], i*50 -k*7, j*50 -k*7, null); } } (ผ้าใบถูกกำหนดไว้ใน "run ()" / SurfaceView อาศัยอยู่ใน GameThread) คำถามแรกของฉันคือฉันจะล้าง (หรือวาดใหม่) ผืนผ้าใบทั้งหมดสำหรับเค้าโครงใหม่ได้อย่างไร ประการที่สองฉันจะอัปเดตเฉพาะบางส่วนของหน้าจอได้อย่างไร? // This is the routine that calls "doDraw": public void run() { while (mRun) { …

2
Android Canvas.drawText
ฉันมีมุมมองฉันวาดด้วยวัตถุ Canvas ในเมธอด onDraw (Canvas canvas) รหัสของฉันคือ: Paint paint = new Paint(); paint.setColor(Color.WHITE); paint.setStyle(Style.FILL); canvas.drawPaint(paint); paint.setColor(android.R.color.black); paint.setTextSize(20); canvas.drawText("Some Text", 10, 25, paint); ปัญหาคือข้อความไม่แสดงผ่านพื้นหลังฉันทำอะไรผิด? ถ้าฉันลบ canvas.drawPaint (paint) และ paint.setColor (android.R.color.black) คุณจะเห็นข้อความบนหน้าจอ .....

8
วิธีการวาดสามเหลี่ยมเต็มในผืนผ้าใบ Android
ฉันวาดสามเหลี่ยมนี้ในแผนที่ Android โดยใช้โค้ดด้านล่างในวิธีการวาดของฉัน: paint.setARGB(255, 153, 29, 29); paint.setStyle(Paint.Style.FILL_AND_STROKE); paint.setAntiAlias(true); Path path = new Path(); path.moveTo(point1_returned.x, point1_returned.y); path.lineTo(point2_returned.x, point2_returned.y); path.moveTo(point2_returned.x, point2_returned.y); path.lineTo(point3_returned.x, point3_returned.y); path.moveTo(point3_returned.x, point3_returned.y); path.lineTo(point1_returned.x, point1_returned.y); path.close(); canvas.drawPath(path, paint); pointX_returned คือพิกัดที่ฉันได้รับจากฟิลด์ โดยทั่วไปคือละติจูดและลองจิจูด ผลลัพธ์ที่ได้คือรูปสามเหลี่ยมที่สวยงาม แต่ภายในว่างเปล่าดังนั้นฉันจึงสามารถดูแผนที่ได้ มีวิธีเติมบ้างไหม?

1
ข้อความการหมุนของ Android: ฉันใช้ dynamiclayout.draw (canvas) แต่ไม่เคลื่อนไหวตามเส้นทางและไม่สามารถใช้ canvas.drawTextOnPath (ไดนามิกเลย์เอาต์)
ฉันใช้https://github.com/mdg-iitr/RotatingTextเวอร์ชันของตัวเองเพื่อแสดงวิดเจ็ตข้อความหมุน วิดีโอมีให้ใน GitHub นี้ช่วยให้คุณดูภาพเคลื่อนไหว ความคิดคือการตั้งค่าแถวของคำ แถวจะแสดงแถวหลังแถว แถวทั้งหมดหมุน (ทำตามคำพูด) แถวจะปรากฏขึ้นหลังจากแถวก่อนหน้าเมื่อภาพเคลื่อนไหวการหมุนของหลังสิ้นสุดลง ปัญหาของฉัน ฉันใช้ a DynamicLayoutเพื่อแสดงแถวของข้อความ ข้อควรจำ: แถวจะต้องหมุน ปัญหาของฉันคือ: canvas.drawTextOnPath(dynamicLayoutObject)เห็นได้ชัดว่าผมไม่สามารถใช้วิธีการ ดังนั้นสิ่งที่ฉันทำคือ: dynamicLayoutObjec.draw(canvas);. แต่ตอนนั้นไม่มีแอนิเมชันใด ๆ แท้จริงแล้วข้อความ (ดังนั้นDynamicLayoutที่มีอยู่) จะต้องหมุน ผลลัพธ์ที่คาดหวัง DynamicLayout(ในความเป็นจริงข้อความ) จะต้องเป็นภาพเคลื่อนไหว (หมุน) การหมุนสามารถพบได้ในภาพประกอบของ repo ต้นฉบับ Github ที่กำหนดไว้ในตอนต้นของคำถาม SO นี้ ( https://github.com/mdg-iitr/RotatingText ) คำถามของฉัน ฉันไม่ทราบวิธีที่จะทำให้DynamicLayout(และ / หรือข้อความ) หมุนไปตามเส้นทางของฉัน ตัวอย่างที่น้อยที่สุดและทดสอบได้ ฉันได้แก้ไขห้องสมุด RotatingText ดั้งเดิมเมื่อ 8 เดือนที่แล้ว เพื่อให้ง่ายขึ้น …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.