亚洲欧美日韩熟女|做爱高潮视频网址|国产一区二区三级片|国产Av中文字幕www.性色av|亚洲婷婷永久免费|国产高清中文字幕|欧美变态网站久re视频精品|人妻AV鲁丝第一页|天堂AV一区二区在线观看|综合 91在线精品

Android 繪制背景標(biāo)簽圖片,文件防偽背景圖詳解

2023-04-12


標(biāo)簽背景圖:


我們?cè)谝恍┪募蛘咭恍┵Y料中,經(jīng)??吹奖尘氨淮蛏蠘?biāo)簽的圖片,作為品牌或者防偽使用。



一、原理


我們看到的是自定義的文字以及文字角度被旋轉(zhuǎn)了,但是文字在在自定義view的時(shí)候,無法通過paint來完成重復(fù)繪制,如果手動(dòng)計(jì)算,那會(huì)很耗時(shí)。這是,我們想到BitmapShader,BitmapShader提供了在X和Y軸的模式,平鋪模式:TileMode,這個(gè)著色器可以自動(dòng)完成模式計(jì)算。

剩余的就是如何將字符串變成Bitmap。


String類型的想要變成bitmap,最快捷的方式就是通過TextView,把textView轉(zhuǎn)換成bitmap,但是由于textview必須添加到window里才能完成轉(zhuǎn)換。這個(gè)時(shí)候如何將text轉(zhuǎn)換成bitmap呢?


我們可以借助StaticLayout。




public StaticLayout(CharSequence source, TextPaint paint, int width,Alignment align, float spacingmult, float spacingadd,boolean includepad)



source:要展示的字符串


paint:畫筆


width:內(nèi)容的寬


align:對(duì)其方式


spacingmult:間距,倍數(shù)


spacingadd:添加的間距


includepad:是否包括pad




StaticLayout layout = new StaticLayout(text, textPaint, 450,
        Layout.Alignment.ALIGN_CENTER, 1.5f, 0.0f, true);



將text轉(zhuǎn)換成bitmap:

1.借助靜態(tài)布局StaticLayout,將文字轉(zhuǎn)換成布局對(duì)象


2.繪制一張空的bitmap對(duì)象




Bitmap bitmap = Bitmap.createBitmap(layout.getWidth() + spaceValue,
        layout.getHeight() + spaceValue, Bitmap.Config.ARGB_8888);


3.將bimap轉(zhuǎn)成一個(gè)新的畫布




Canvas canvas = new Canvas(bitmap);
canvas.translate(10, 10);



4.將新畫布繪制到靜態(tài)布局里,這時(shí)候,bitmap已變成當(dāng)前布局中的對(duì)象,這樣我們就得到了text的bitmap。


5.拿到bitmap,我們還要對(duì)bitmap進(jìn)行旋轉(zhuǎn)和平鋪模式進(jìn)行處理,這時(shí)候我們需要借助與BitmapShader。



BitmapShader shader=new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);



創(chuàng)建一個(gè)著色器,色值填充樣式為重復(fù)在x和y軸。


這時(shí)還缺少對(duì)bitmap進(jìn)行旋轉(zhuǎn),由于BitmapShader提供了setLocalMatrix方法,我們可以通過新的矩陣來完成旋轉(zhuǎn)


Matrix matrix=new Matrix();
matrix.setRotate(-45);
shader.setLocalMatrix(matrix);

6.將做色器添加到畫筆中




paint.setShader(shader);



7.繪制一個(gè)矩形控件即可。這時(shí)候畫筆中已經(jīng)設(shè)置好著色器,




canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),paint);



最后的結(jié)果為:



三、核心代碼


/**
     * @param textSize 字體大小
     * @param text 需要展示的內(nèi)容
     * */

    public static Bitmap textAsBitmap(String text, float textSize) {

        TextPaint textPaint = new TextPaint();

        textPaint.setColor(Color.DKGRAY);
        textPaint.setAntiAlias(true);
        textPaint.setTextSize(textSize);
        textPaint.setAlpha(100);//透明度

        int spaceValue=150;//控制各個(gè)間距的大小

        StaticLayout layout = new StaticLayout(text, textPaint, 400,
                Layout.Alignment.ALIGN_NORMAL, 1.5f, 0.0f, true);
        Bitmap bitmap = Bitmap.createBitmap(layout.getWidth() + spaceValue,
                layout.getHeight() + spaceValue, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        canvas.translate(10, 10);
        layout.draw(canvas);
        return bitmap;
    }
@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (paint == null) {
            paint = new Paint();
        }

        Bitmap bitmap=textAsBitmap(showName,60);




        BitmapShader shader=new BitmapShader(bitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
        Matrix matrix=new Matrix();
        matrix.setRotate(-45);
        shader.setLocalMatrix(matrix);
        paint.setShader(shader);
        canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),paint);


    }

注意:由于這些text無法完成寬度測(cè)量,里面都是固定值。所以一般寬度都是固定的,在使用過程中根據(jù)自己的需求,調(diào)整寬度和間距大小即可。


本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>

免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com