最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android圖片描邊效果的實(shí)現(xiàn)

 更新時(shí)間:2023年12月12日 08:41:06   作者:時(shí)光少年  
這篇文章主要給大家介紹了Android圖片描邊效果的實(shí)現(xiàn),在添加圖片描邊的時(shí)候我們用到的是圖片蒙版技術(shù),文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下

前言

先看下我們闊愛滴海綿寶寶,其原圖是一張PNG圖片,我們給寶寶加上描邊效果,今天我們使用的是圖片蒙版技術(shù)。

說到蒙版可能很多人想起PS摳圖軟件,Android上也一樣,同一個(gè)大樹上可能會(huì)長(zhǎng)出兩種果實(shí),但果實(shí)的根基是一樣的。

什么是蒙版:所謂蒙版是只保留了alpha通道的一種二維正交投影,簡(jiǎn)單的說就是你躺在地上,太陽光直射下來,背后的那片就是你的蒙版。因此,它既不存在三維特征,也不存在色彩特征,只有alpha特征。那只有alpha通道的圖片是什么顏色,這塊沒有具體了解過,但是理論上取決于默認(rèn)填充色,在Android上最終是白色的,其他平臺(tái)暫時(shí)還沒了解。

提取蒙版

Android上提取蒙版比想象的容易,按照以往的思路,我們是要進(jìn)行圖片掃描這里,其實(shí)就是把所有顏色的red、green、blue都排除掉,只保留alpha,相當(dāng)于縮小了通道數(shù),排除采樣和縮小圖片,當(dāng)然這個(gè)工作量是很大的,尤其是超高清圖片。

Android 上提取蒙版,只需要把原圖繪制到alpha通道的Bitmap上

bms = decodeBitmap(R.mipmap.mm_07);
bmm = Bitmap.createBitmap(bms.getWidth(), bms.getHeight(), Bitmap.Config.ALPHA_8);
Canvas canvas = new Canvas(bmm);
canvas.drawBitmap(bms, 0, 0, null);

蒙版繪制

蒙版繪制和其他Bitmap繪制是有差異的,ARGB_8888和RGB_565等色彩格式的圖片,其本身是具備顏色的,但是蒙版圖片不一樣,他沒有顏色,所以你繪制的時(shí)候,bitmap的顏色是你畫筆Paint的填充色,突然想到可以做一個(gè)人體掃描的動(dòng)畫效果或者人體熱力圖。

canvas.drawBitmap(bmm, x, y, paint);

擴(kuò)大蒙版(影子)

要讓蒙版比比原圖大,理論上是需要等比例放大蒙版在平移,還有一種方式是進(jìn)行偏移繪制,我們這里使用偏移繪制。當(dāng)然,這里取一定360,保證盡可能每個(gè)方向都有偏移,這是看到的外國人的算法。至于step>0 但是也要控制粒度,太小可能繪制次數(shù)太多,太大可能有些邊緣做不到偏移。

for (int i = 0; i < 360; i += step) {
    float x = width * (float) Math.cos(Math.toRadians(i));
    float y = width * (float) Math.sin(Math.toRadians(i));
    canvas.drawBitmap(bmm, x, y, paint);
}

閃爍效果

我們價(jià)格顏色閃爍的效果,其實(shí)很簡(jiǎn)單,也不是本篇重要的部份,其實(shí)就是在色彩中間插入透明色,然后定時(shí)閃爍。

int index = -1;
int max = 15;
int[] colors = new int[max];
final int[] highlightColors = {0xfff00000,0,0xffff9922,0,0xff00ff00,0};

public void shake() {
    index = 0;
    for (int i = 0; i < max; i+=2) {
        colors[i] = highlightColors[i % highlightColors.length];
    }
    postInvalidate();
}

總結(jié)

本篇到這里就結(jié)束了,希望利用蒙版+偏移做出更多東西。

全部代碼

public class ViewHighLight extends View {
    final Bitmap bms; //source 原圖
    final Bitmap bmm; //mask 蒙版
    final Paint paint;
    final int width = 4;
    final int step = 15; // 1...45
    int index = -1;
    int max = 15;
    int[] colors = new int[max];
    final int[] highlightColors = {0xfff00000,0,0xffff9922,0,0xff00ff00,0};
    public ViewHighLight(Context context) {
        super(context);
        bms = decodeBitmap(R.mipmap.mm_07);
        bmm = Bitmap.createBitmap(bms.getWidth(), bms.getHeight(), Bitmap.Config.ALPHA_8);
        Canvas canvas = new Canvas(bmm);
        canvas.drawBitmap(bms, 0, 0, null);
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    }

    private Bitmap decodeBitmap(int resId) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inMutable = true;
        return BitmapFactory.decodeResource(getResources(), resId, options);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // draw blur shadow

        for (int i = 0; i < 360; i += step) {
            float x = width * (float) Math.cos(Math.toRadians(i));
            float y = width * (float) Math.sin(Math.toRadians(i));
            canvas.drawBitmap(bmm, x, y, paint);
        }
        canvas.drawBitmap(bms, 0, 0, null);

        if(index == -1){
            return;
        }
        index++;
        if(index > max +1){
            return;
        }
        if(index >= max){
            paint.setColor(Color.TRANSPARENT);
        }else{
            paint.setColor(colors[index]);
        }
        postInvalidateDelayed(200);
    }


    public void shake() {
        index = 0;
        for (int i = 0; i < max; i+=2) {
            colors[i] = highlightColors[i % highlightColors.length];
        }
        postInvalidate();
    }
}

以上就是Android;圖片描邊效果實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Android 圖片描邊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android Viewpager實(shí)現(xiàn)輪播廣告圖

    Android Viewpager實(shí)現(xiàn)輪播廣告圖

    這篇文章主要為大家詳細(xì)介紹了Android Viewpager實(shí)現(xiàn)輪播廣告圖,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解

    Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解

    本篇文章主要介紹了Android學(xué)習(xí)筆記之ListView復(fù)用機(jī)制詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android實(shí)現(xiàn)自定義帶文字和圖片Button的方法

    Android實(shí)現(xiàn)自定義帶文字和圖片Button的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)自定義帶文字和圖片Button的方法,涉及Android針對(duì)Button按鈕的布局與設(shè)計(jì)技巧,需要的朋友可以參考下
    2015-05-05
  • Android開發(fā)中如何去掉app標(biāo)題欄的實(shí)現(xiàn)

    Android開發(fā)中如何去掉app標(biāo)題欄的實(shí)現(xiàn)

    這篇文章主要介紹了Android開發(fā)中如何去掉app標(biāo)題欄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 淺談Android IPC機(jī)制之Binder的工作機(jī)制

    淺談Android IPC機(jī)制之Binder的工作機(jī)制

    IPC機(jī)制即為跨進(jìn)程通信,是inter-Process Communication的縮寫。是指兩個(gè)進(jìn)程之間進(jìn)行通信。在說進(jìn)程通信之前,我們的弄明白什么是線程,什么是進(jìn)程。進(jìn)程和線程是兩個(gè)截然不同的概念。本文將介紹Android IPC機(jī)制之Binder的工作機(jī)制。
    2021-06-06
  • 使用DrawerLayout組件實(shí)現(xiàn)側(cè)滑抽屜的功能

    使用DrawerLayout組件實(shí)現(xiàn)側(cè)滑抽屜的功能

    DrawerLayout組件同樣是V4包中的組件,也是直接繼承于ViewGroup類,所以說是一個(gè)容器類,下面通過本文給大家介紹使用DrawerLayout組件實(shí)現(xiàn)側(cè)滑抽屜的功能,感興趣的朋友一起看下吧
    2016-08-08
  • Android Service開發(fā)應(yīng)用實(shí)例

    Android Service開發(fā)應(yīng)用實(shí)例

    Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒有接口,生命周期也與活動(dòng)Activity非常不同。通過使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁等,下面來看看詳細(xì)內(nèi)容,需要的朋友可以參考下
    2022-12-12
  • Android自定義圓形進(jìn)度條

    Android自定義圓形進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android自定義圓形進(jìn)度條的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android UI設(shè)計(jì)與開發(fā)之仿人人網(wǎng)V5.9.2最新版引導(dǎo)界面

    Android UI設(shè)計(jì)與開發(fā)之仿人人網(wǎng)V5.9.2最新版引導(dǎo)界面

    這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開發(fā)之仿人人網(wǎng)V5.9.2最新版引導(dǎo)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android Mms之:深入理解對(duì)話列表管理

    Android Mms之:深入理解對(duì)話列表管理

    本篇文章是對(duì)Android中的對(duì)話列表管理進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

宜章县| 乌什县| 凤台县| 乳山市| 醴陵市| 交口县| 青河县| 新竹市| 九龙坡区| 芜湖县| 天柱县| 道孚县| 麻城市| 库车县| 磴口县| 潢川县| 同江市| 榆中县| 大悟县| 云霄县| 炉霍县| 乌苏市| 车险| 珠海市| 都安| 顺义区| 沁阳市| 崇礼县| 江阴市| 曲阳县| 安国市| 镇赉县| 屏边| 来安县| 巴林右旗| 淮南市| 宁陕县| 江陵县| 广灵县| 哈尔滨市| 桃园县|