PorterDuffXferMode不正確的真正原因PorterDuffXferMode深入試驗
原文地址:http://blog.csdn.net/wingichoy/article/details/50534175
感謝博主“郵電三精-大精wing”,不小心踩坑加班,還好解決了。
菜雞wing遇敵PorterDuffXferMode,不料過於輕敵,應戰吃力。隨後與其大戰三天三夜,三百餘回合不分勝負。幸得 @咪咪控 相助,僥倖獲勝。
關鍵字:PorterDuffXferMode 錯誤 不正確 不達到預期 bug
上一篇帶來一個使用PorterDuffXferMode 做的 水波紋loadingview,中間遇到了點小困難。
(說人話) PorterDuffXferMode總是不能按照效果圖預期的效果執行。關於PorterDuffXferMode的錯誤顯示是一個對初學者十分深的坑,到底是bug呢,還是有需要注意的地方呢。這裡就跟隨我 帶上手電筒,去一探究竟。
轉載請註明出處:http://blog.csdn.NET/wingichoy/article/details/50534175
首先,大家都知道有一個圖片:
然後,大部分時候 是看到了覺得很神奇,就躍躍欲試,尤其是src_in 和dstIn可以實現遮罩效果,例如圓角圖片 圓形圖片都用了這種模式。
於是就挨個測試各種模式是否生效,結果往往不能達到預期效果。我們來做個測試。
從最簡單的開始:
1.直接在canvas上面繪製圖形:
- @Override
-
protectedvoid onDraw(Canvas canvas) {
- //dst
- canvas.drawRect(20,20,80,80,mDstPaint);
- //src
- canvas.drawCircle(30,30,30,mSrcPaint);
- }
原圖效果是這樣的:
現在加一個mode上來,XOR
- @Override
- protectedvoid onDraw(Canvas canvas) {
- //dst
- canvas.drawRect(20,20,80,80,mDstPaint);
-
mSrcPaint.setXfermode(new
- //src
- canvas.drawCircle(30,30,30,mSrcPaint);
- }
WTF!!?? 這是什麼鬼。不應該是相交部分消失嗎。 網上說“硬體加速”對這個有影響,那麼在構造器裡關閉硬體加速試一下:
- public TestView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- mDstPaint = new Paint();
- mSrcPaint = new Paint();
- mDstPaint.setColor(Color.YELLOW);
- mSrcPaint.setColor(Color.BLUE);
- setLayerType(View.LAYER_TYPE_SOFTWARE, null);
- }
執行的結果:
這下正常了。相交的部分消失了。
結論1:硬體加速對PorterDuffXferMode有影響,使用前請關閉硬體加速。
那麼這下真的天下太平了嗎?nonono~不要太天真,不然怎麼能叫萬丈深淵呢。
繼續試驗其他模式: 將模式改為SRC_IN
WTF?????跟效果圖根本不一致好嗎!!!! 在試試DST_IN
你確定你沒有在逗我???? 怎麼是這個鬼東西。 (當時鼓搗了我三天四夜,一直在日狗,不過先別急,慢慢來。)
為什麼一定要按照那個效果圖來呢。。。 因為特麼的那個圖是官方的一個demo。。 那麼我們就來看看這個demo長什麼樣!
- package io.appium.android.apis.graphics;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapShader;
- import android.graphics.Canvas;
- import android.graphics.Color;
- import android.graphics.Matrix;
- import android.graphics.Paint;
- import android.graphics.PorterDuff;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.RectF;
- import android.graphics.Shader;
- import android.graphics.Xfermode;
- import android.os.Bundle;
- import android.view.View;
- publicclass Xfermodes extends GraphicsActivity {
- // create a bitmap with a circle, used for the "dst" image
- static Bitmap makeDst(int w, int h) {
- Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(bm);
- Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
- p.setColor(0xFFFFCC44);
- c.drawOval(new RectF(0, 0, w*3/4, h*3/4), p);
- return bm;
- }
- // create a bitmap with a rect, used for the "src" image
- static Bitmap makeSrc(int w, int h) {
- Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
- Canvas c = new Canvas(bm);
- Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
- p.setColor(0xFF66AAFF);
- c.drawRect(w/3, h/3, w*19/20, h*19/20, p);
- return bm;
- }
- @Override
- protectedvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(new SampleView(this));
- }
- privatestaticclass SampleView extends View {
- privatestaticfinalint W = 64;
- privatestaticfinalint H = 64;
- privatestaticfinalint ROW_MAX = 4; // number of samples per row
- private Bitmap mSrcB;
- private Bitmap mDstB;
- private Shader mBG; // background checker-board pattern
- privatestaticfinal Xfermode[] sModes = {
- new PorterDuffXfermode(PorterDuff.Mode.CLEAR),
- new PorterDuffXfermode(PorterDuff.Mode.SRC),
- new PorterDuffXfermode(PorterDuff.Mode.DST),
- new PorterDuffXfermode(PorterDuff.Mode.SRC_OVER),
- new PorterDuffXfermode(PorterDuff.Mode.DST_OVER),
- new PorterDuffXfermode(PorterDuff.Mode.SRC_IN),
-
new
相關推薦
PorterDuffXferMode不正確的真正原因PorterDuffXferMode深入試驗
原文地址:http://blog.csdn.net/wingichoy/article/details/50534175 感謝博主“郵電三精-大精wing”,不小心踩坑加班,還好解決了。 菜雞wing遇敵PorterDuffXferMode,不料過於輕
細數PorterDuffXferMode的幾個坑, PorterDuffXferMode不正確的真正原因
菜雞wing遇敵PorterDuffXferMode,不料過於輕敵,應戰吃力。隨後與其大戰三天三夜,三百餘回合不分勝負。幸得 @咪咪控 相助,僥倖獲勝。 關鍵字:PorterDuffXferMode 錯誤 不正確 不達到預期 bug 上一篇帶來一
modelsim仿真正確FPGA運行不正確的可能原因
仿真 warn bsp pga del 自己的 編譯器優化 綜合 log 困住整整一周了,工作進行不下去,中午偶遇導師,指導意見是有兩種可能: 1. FPGA編譯器優化代碼,可以考慮把綜合過程中所有的warning排查一下 2. verilog裏有不可綜合的語句。 又及
C#調用dll提示"試圖加載格式不正確的程序"原因及解決方法
strong str 調用 http 解決 操作系統 就會 項目設計 utm 轉載:https://blog.csdn.net/songyi160/article/details/51354660 程序在32位操作系統上運行正常,在64位操作系統上運行讀卡功能提示”試圖加載
struts2的action是執行緒安全的,struts1的action不是執行緒安全的真正原因
為什麼struts2的action是執行緒安全的,struts1的action不是執行緒安全的? 先對struts1和struts2的原理做一個簡單的講解 對於struts1 ,當第一次**.do的請求過來時,在記憶體中的actionmapping中找到相對應的action,然後new出
Oracle:ORA-01789: 查詢塊具有不正確的結果列數 分析原因和解決辦法
一、分析原因 union指令的目的是將兩個sql語句的查詢結果合併起來, 可以檢視你要的查詢結果 。 但是要注意使用union連線的兩個sql 語句的欄位型別 、 欄位個數 、 欄位名要求完全匹配 。 union在進行表連線後會對產生的結果進行排序運算 , 刪除重複資料後返回結
Python中檔名、目錄名或卷標語法不正確。: '\u202aE:的錯誤原因
一般出現這個錯誤是因為在路徑中出現了這個Unicode 202a字元,這個字元的含義是left to right,也就是從左到右的閱讀順序,在寫程式碼的時候顯示不出來,但是在命令列中可以顯示出來:。 那麼它是哪裡來的?我這裡是複製windows檔案屬性的時候複製下圖中的路徑
電腦公司特別版8.5出現 fastfat.sys檔案不正確及藍屏錯誤的原因之一
昨天晚上用電腦公司特別版8.5進行裝機, 是幾年有的老機子,結果克隆完成後,提示fastfat.sys檔案損壞,真的很奇怪。這張光碟有是剛剛用刻錄的,應該不會有問題。 我開始還真以為檔案壞了, 用xp的原版盤進行的expand還原,結果沒用。然後再刪除分割槽重建,也沒用。後來
常用的幾種清除float浮動的方法 一、浮動產生原因 簡單地說,浮動是因為使用了float:left或float:right或兩者都有而產生的浮動,導致樣式缺失或者不正確顯示等問題; 二、浮動產生
一、浮動產生原因 簡單地說,浮動是因為使用了float:left或float:right或兩者都有而產生的浮動,導致樣式缺失或者不正確顯示等問題;二、浮動產生負作用1、背景不能顯示由於浮動產生,如果對父級設定了(CSS background背景)CSS背景顏色或CSS背景圖片,而父級不能被撐開,所以導致CSS
用phpstudy正確配置阿里伺服器 網站就是不能瀏覽原因
用phpstudy 配置PHP+MYSQL阿里雲伺服器, 所有配置都正確,伺服器本地上也正常瀏覽, 但是用繫結伺服器的域名開啟瀏覽就是不行。 原因是阿里雲伺服器上的安全設定問題 阿里雲伺服器預設不能
[轉貼]顯示卡驅動不正確導致黑屏原因
故障現象:電腦啟動後能正常顯示Windows啟動介面,到了顯示Windows桌面時突然黑屏。 分析解決:經仔細觀查,發現黑屏時顯示器的各個指示燈不停閃爍,這說明顯示器無訊號輸入。因在開機自檢時顯示器能夠正常顯示,同時幾次黑屏的時間均在顯示Windows桌面前,故排除了顯示器與顯示卡接觸不良的可能,初步判斷為
jsp導出身份證到excel時候格式不正確
excel導出 jsb 沒有 顯示 art num 找到 size 一個 今天早上客戶跟我說excel導出身份證的時候顯示有的對有的不對,我一看原來身份證以X結尾的能夠,其他都顯示不對。身份正顯示如圖所看到的: 在網上搜了一下發現,原來excel看你數
漢諾塔學習筆記,有不正確的地方請小夥伴們指正~·~
學習 順序執行 == cab -1 nbsp 什麽 猜想 abc 1* n=3.abc; 2* n-1=2,acb; 3* n-1=1,abc 1* n=3,執行hanoi(n-1,A,C,B); =>2* n-1=2,acb執行hanoi
未能加載文件或程序集“XXXXXX”或它的某一個依賴項。試圖加載格式不正確的程序。
link 依賴項 search 操作系統 true 應用程序 swe clas 格式不正確 原因:操作系統是64位的,但發布的程序引用了一些32位的ddl,所以出現了兼容性的問題解決方案一:如果是64位機器,IIS——應用程序池——高級設置——啟用32位應用程序 :true
SQL Server 檢測到基於一致性的邏輯 I/O 錯誤 pageid不正確、數據庫日誌文 件丟失
日誌文件 科技 文件丟失 i/o 處理 企業管理 eid dbcc 無法連接 客戶名稱:深圳某科技信息有限公司 數據庫類型:sql2000 數據庫大小:20g 故障經過 電腦突然斷電,軟件就顯示某數據庫錯誤,無法連接,打開企業管理器,顯示數 據庫質疑,DBCC查詢顯示“ S
修改hosts不立即生效原因分析
real 專註 開始 image 下載 when 顯示 方法 做了 我們經常也遇到修改hosts不生效的情況,而且有時生效,有時不生效的情況也有發生,這到底是為什麽呢? 起:DNS緩存機制 關於DNS緩存的機制,有一篇非常詳細的文章What really happens w
未能加載文件或程序集“file:///D:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.3DAnalyst.dll”或它的某一個依賴項。試圖加載格式不正確的程序。 行 129,位置 5。
config onf gac mil runt 方案 htm 添加 conf 能加載文件或程序集“file:///C:/Program Files (x86)/ArcGIS/DeveloperKit10.0/DotNet/ESRI.ArcGIS.ADF.Loca
CSS 中first-child和last-child不起作用原因
clas 第一個 元素 col 沒有 XML last 發的 n) 今天開發的時候,發現last-child不起作用,看了下原因順便給自己學習CSS選擇器,我們這裏舉個例子,如下代碼:<div><h1>title</h1> <p&g
【轉】未能加載文件或程序集“XXX”或它的某一個依賴項。試圖加載格式不正確的程序。
平臺 文件 導致 啟用 方法 位置 一個 nbsp cpu “/xxxxx”應用程序中的服務器錯誤。 -------------------------------------------------------------------------------- 未能加載文
未能加載文件或程序集 或它的某一個依賴項。試圖加載格式不正確的程序。問題解決
啟用 base font 平臺 問題解決 發布 .dll 路徑 article 未能加載文件或程序集 或它的某一個依賴項。試圖加載格式不正確的程序。問題解決 一般情況下出現這樣的問題是因為.dll文件不存在或者路徑不正確。但今天我遇到的情況都不在這兩個內。我確定.dll