日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android使用PorterDuffXfermode实现遮罩效果

發布時間:2023/12/10 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android使用PorterDuffXfermode实现遮罩效果 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當我們在程序里需要做遮罩效果時,可以PorterDuffXfermode類實現。

例如有一副圖片,需要使用一個圖形(一般是可以使用Canvas畫出來的圖形),圖形覆蓋到的地方在圖片上才顯示出來,可以使用PorterDuff.Mode.SRC_IN屬性實現,常見的有圓形頭像的實現。

先創建圖片Bitmap一樣大小的Canvas,再設置將圖形畫到Canvas里,再畫圖片bitmap畫到Canvas里。

例子:

private Bitmap createDoneImage() {if (mDoneDegrees < 0 || mDoneBitmap == null) {return null;}int width = mDoneBitmap.getWidth();int height = mDoneBitmap.getHeight();Paint paint = new Paint();paint.setAntiAlias(true);Bitmap target = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(target);canvas.drawRect(0, 0, width * mDoneDegrees, height, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));canvas.drawBitmap(mDoneBitmap, 0, 0, paint);return target;}

如果想在圖片不顯示圖形所在的地方,可以使用PorterDuff.Mode.SRC_OUT屬性實現。

例子:

private Bitmap createUpImage() {if (mUpBitmap == null || mAnimHeight == -1 || mUpAlpha < 0) {return null;}int width = mUpBitmap.getWidth();int height = mUpBitmap.getHeight();Paint paint = new Paint();paint.setAntiAlias(true);Bitmap target = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(target);canvas.drawRect(0, mAnimHeight - mHeight, width, mAnimHeight, paint);paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT));canvas.drawBitmap(mUpBitmap, 0, 0, paint);return target;}

Android的PorterDuff.Mode類中列舉了他們制定的規則:

PorterDuff.Mode.SRC :只繪制源圖像

PorterDuff.Mode.DST :只繪制目標圖像

PorterDuff.Mode.DST_OVER :在源圖像的頂部繪制目標圖像

PorterDuff.Mode.DST_IN :只在源圖像和目標圖像相交的地方繪制目標圖像

PorterDuff.Mode.DST_OUT :只在源圖像和目標圖像不相交的地方繪制目標圖像

PorterDuff.Mode.DST_ATOP :在源圖像和目標圖像相交的地方繪制目標圖像,在不相交的地方繪制源圖像

PorterDuff.Mode.SRC_OVER :在目標圖像的頂部繪制源圖像

PorterDuff.Mode.SRC_IN :只在源圖像和目標圖像相交的地方繪制源圖像

PorterDuff.Mode.SRC_OUT :只在源圖像和目標圖像不相交的地方繪制源圖像

PorterDuff.Mode.SRC_ATOP :在源圖像和目標圖像相交的地方繪制源圖像,在不相交的地方繪制目標圖像

PorterDuff.Mode.XOR :在源圖像和目標圖像重疊之外的任何地方繪制他們,而在不重疊的地方不繪制任何內容

PorterDuff.Mode.LIGHTEN :獲得每個位置上兩幅圖像中最亮的像素并顯示

PorterDuff.Mode.DARKEN :獲得每個位置上兩幅圖像中最暗的像素并顯示

PorterDuff.Mode.MULTIPLY :將每個位置的兩個像素相乘,除以255,然后使用該值創建一個新的像素進行顯示。結果顏色=頂部顏色*底部顏色/255

PorterDuff.Mode.SCREEN :反轉每個顏色,執行相同的操作(將他們相乘并除以255),然后再次反轉。結果顏色=255-(((255-頂部顏色)*(255-底部顏色))/255)



總結

以上是生活随笔為你收集整理的Android使用PorterDuffXfermode实现遮罩效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。