[問題] canvas取得寬高問題

看板AndroidDev作者 (Neko)時間13年前 (2011/06/07 16:13), 編輯推噓4(4025)
留言29則, 8人參與, 最新討論串1/1
開發層: (應用/框架/庫/核心) APP 問題: 請問我想在手機螢幕上畫圖 且適用於不同螢幕尺寸的手機 所以我想先取得每支手機的Canvas寬高 我的context view裡的onDraw方法如下: public void onDraw(Canvas canvas) { String TAG= "MY"; int h= canvas.getHeight(); int w= canvas.getWidth(); int d= canvas.getDensity(); Log.v(TAG, "高\t"+ h); Log.v(TAG, "寬\t"+ w); Log.v(TAG, "Density\t"+ d); } 然後我在DDMS中找TAG的訊息 顯示的是: 高 533 寬 320 Density 160 我用的手機是HTC Desire 解析度應該是800x480 為什麼顯示的只有533x320呢 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.240.176.185

06/07 16:49, , 1F
canvas和手機螢幕的大小好像是不同的東西
06/07 16:49, 1F

06/07 18:09, , 2F
可是我的Canvas不就是Activity的Context嗎
06/07 18:09, 2F

06/07 18:10, , 3F
我的Activity在螢幕上顯示 Canvas不能代表螢幕解析度嗎
06/07 18:10, 3F

06/07 20:22, , 4F
canvas應該是當前畫布可用大小.
06/07 20:22, 4F

06/07 20:23, , 5F
螢幕解析度再扣掉status bar, title bar, 就會是canvas
06/07 20:23, 5F

06/07 20:23, , 6F
的大小.
06/07 20:23, 6F

06/07 20:23, , 7F
要不然, 就寫指令把activity變成全螢幕.
06/07 20:23, 7F

06/07 20:50, , 8F
那我想在canvas上畫bitmap使得寬或高縮放至到螢幕邊緣
06/07 20:50, 8F

06/07 20:51, , 9F
是不是該先偵測我的canvas最大可以到多大
06/07 20:51, 9F

06/07 21:34, , 10F
06/07 21:34, 10F

06/07 21:35, , 11F
畫布(canvas)也可以10x10啊, 還是取手機螢幕大小吧
06/07 21:35, 11F

06/07 23:08, , 12F
用 onSizeChanged() 呢?
06/07 23:08, 12F

06/07 23:51, , 13F
感謝各位 我在onSizeChange裡getHeight,getWidth
06/07 23:51, 13F

06/07 23:51, , 14F
得到的height=483, width=320 好像被縮小的感覺
06/07 23:51, 14F

06/07 23:54, , 15F
如果我想取得canvas在view裡的最大寬高 該怎麼get呢?
06/07 23:54, 15F

06/08 00:07, , 16F
get? set? create?
06/08 00:07, 16F

06/08 00:10, , 17F
Display d = getWindowManager().getDefaultDisplay();
06/08 00:10, 17F

06/08 00:11, , 18F
int width = d.getWidth();
06/08 00:11, 18F

06/08 00:11, , 19F
int height = d.getHeight();
06/08 00:11, 19F

06/08 00:11, , 20F
這個如何?
06/08 00:11, 20F

06/08 00:18, , 21F
不知道有沒例外狀況..
06/08 00:18, 21F

06/08 09:48, , 22F
樓上大大的方法試了一下顯示的還是533x320
06/08 09:48, 22F

06/08 09:49, , 23F
為什麼總是被縮小1.5倍 ="=
06/08 09:49, 23F

06/08 11:16, , 24F
Display d = ((WindowManager)context.getSystemService
06/08 11:16, 24F

06/08 11:16, , 25F
("window")).getDefaultDisplay();
06/08 11:16, 25F

06/08 11:17, , 26F
我是都這樣寫,試試看吧 =)
06/08 11:17, 26F

06/08 14:06, , 27F
Density傳回150比較合理 傳回160就真的很詭異了XD
06/08 14:06, 27F

06/08 23:46, , 28F
Cinfinite大大的看不懂...
06/08 23:46, 28F

06/08 23:47, , 29F
另外Density究竟是甚麼概念呢?不能單純以pixel為單位嗎
06/08 23:47, 29F
文章代碼(AID): #1DxTt3C_ (AndroidDev)