查看完整版本: 關於自定義View (Android)
頁: [1]

RainieYang 發表於 2019-3-5 06:43 PM

關於自定義View (Android)

安安,各位大大,小弟想請教。
在一個給定的View,長寬都已固定的情況(不想去改他)。

有沒有辦法利用 onDraw(Canvas canvas) 之類的方法,讓他畫超出View本身限制的寬高範圍外?
因為工作的需求需要在原本的View外部加上光圈,目前改動幅度最小,最不會出問題的方式就是必須在不去動本來View的寬高的情況下,讓他畫圖的時候畫超出View給定的寬高。
(聽說IOS有辦法辦到這件事?  難道Android不行嗎? )
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><div></div>

ahway9988 發表於 2019-3-5 10:58 PM

我前陣子在做遊戲地圖繪圖的時候好像也有遇到像這樣的問題,
但又怕不一樣,不知道我查到的方法對您有沒有用
就是另外宣告一個Bitmap,比這個View 大一點,讓canvas去draw您想要的材料
最後再把Bitmap 物件丟給View

RainieYang 發表於 2019-3-6 06:32 PM

ahway9988 發表於 2019-3-5 10:58 PM static/image/common/back.gif
我前陣子在做遊戲地圖繪圖的時候好像也有遇到像這樣的問題,
但又怕不一樣,不知道我查到的方法對您有沒有用
...

你好 我試了之後依然不行 bitmap大於view set之後 超過的部分依然不會顯示 還是會被view的大小侷限,  後來我只好用折衷的做法, 先根據我要額外繪製的光圈需要的範圍,事先去擴增本來view的寬高(在onMeasure()裡面使用 setMeasureDimension()),寬高被我擴充後我就有空間能在外部畫光圈了。
但這做法的潛在問題是,我們的需求好像其他view要對齊內部的view而不是外部的光圈,但我這樣做的話對其的部分會變成對齊光圈,這部分也是能另想辦法處理掉就是了。...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

ahway9988 發表於 2019-3-6 11:11 PM

RainieYang 發表於 2019-3-6 06:32 PM static/image/common/back.gif
你好 我試了之後依然不行 bitmap大於view set之後 超過的部分依然不會顯示 還是會被view的大小侷限,  後 ...

您說的光圈,我聽起來好像跟乙拉那套繪圖軟體裡的光圈意思一樣嗎?或之類的繪圖軟體
前陣子有上到這門課,說不定你的問題也能夠解決掉我將來會遇到的問題...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

codewice 發表於 2019-3-12 01:49 AM

沒記錯的話,你的 custom view 在拿到 Canvas 之前,上層的 view 已經對 canvas 呼叫 clip 裁切出你被允許畫的範圍了。

聽起來你拿一個 FrameLayout 把你給定的 View 包起來,然後讓 FrameLayout 去負責畫光圈,可能會是衝擊比較小的做法?<br><br><br><br><br><div></div>

RainieYang 發表於 2019-3-20 03:13 AM

codewice 發表於 2019-3-12 01:49 AM static/image/common/back.gif
沒記錯的話,你的 custom view 在拿到 Canvas 之前,上層的 view 已經對 canvas 呼叫 clip 裁切出你被允許 ...

謝謝,我後來是在onmeasure判斷,如果是可能需要畫光圈的情況,就根據要畫的光圈粗度重設新的寬高,讓光圈有可以畫的空間,用一個layout包住不太適合的原因是,沒有一開始就這樣,已經很多地方用到,要改就要手動變更所有地方的布局,很麻煩容易改錯,事後又要改也很麻煩...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>
頁: [1]