1. 程式人生 > >android 圓形的圖片裡面帶字

android 圓形的圖片裡面帶字

需要的類裡面

private TextDrawable.IBuilder mDrawableBuilder;

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mDrawableBuilder = TextDrawable.builder().round();
 
}

package com.nesun.jpw.view.textdrawable;



import android.graphics.*;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.RoundRectShape;


/**
 * @author 
 */
public class TextDrawable extends ShapeDrawable {


    private final Paint textPaint;
    private final Paint borderPaint;
    private static final float SHADE_FACTOR = 0.9f;
    private final String text;
    private final int color;
    private final RectShape shape;
    private final int height;
    private final int width;
    private final int fontSize;
    private final float radius;
    private final int borderThickness;


    private TextDrawable(Builder builder) {
        super(builder.shape);


        // shape properties
        shape = builder.shape;
        height = builder.height;
        width = builder.width;
        radius = builder.radius;


        // text and color
        text = builder.toUpperCase ? builder.text.toUpperCase() : builder.text;
        color = builder.color;


        // text paint settings
        fontSize = builder.fontSize;
        textPaint = new Paint();
        textPaint.setColor(builder.textColor);
        textPaint.setAntiAlias(true);
        textPaint.setFakeBoldText(builder.isBold);
        textPaint.setStyle(Paint.Style.FILL);
        textPaint.setTypeface(builder.font);
        textPaint.setTextAlign(Paint.Align.CENTER);
        textPaint.setStrokeWidth(builder.borderThickness);


        // border paint settings
        borderThickness = builder.borderThickness;
        borderPaint = new Paint();
        borderPaint.setColor(getDarkerShade(color));
        borderPaint.setStyle(Paint.Style.STROKE);
        borderPaint.setStrokeWidth(borderThickness);


        // drawable paint color
        Paint paint = getPaint();
        paint.setColor(color);


    }


    private int getDarkerShade(int color) {
        return Color.rgb((int)(SHADE_FACTOR * Color.red(color)),
                (int)(SHADE_FACTOR * Color.green(color)),
                (int)(SHADE_FACTOR * Color.blue(color)));
    }


    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        Rect r = getBounds();




        // draw border
        if (borderThickness > 0) {
            drawBorder(canvas);
        }


        int count = canvas.save();
        canvas.translate(r.left, r.top);


        // draw text
        int width = this.width < 0 ? r.width() : this.width;
        int height = this.height < 0 ? r.height() : this.height;
        int fontSize = this.fontSize < 0 ? (Math.min(width, height) / 2) : this.fontSize;
        textPaint.setTextSize(fontSize);
        canvas.drawText(text, width / 2, height / 2 - ((textPaint.descent() + textPaint.ascent()) / 2), textPaint);


        canvas.restoreToCount(count);


    }


    private void drawBorder(Canvas canvas) {
        RectF rect = new RectF(getBounds());
        rect.inset(borderThickness/2, borderThickness/2);


        if (shape instanceof OvalShape) {
            canvas.drawOval(rect, borderPaint);
        }
        else if (shape instanceof RoundRectShape) {
            canvas.drawRoundRect(rect, radius, radius, borderPaint);
        }
        else {
            canvas.drawRect(rect, borderPaint);
        }
    }


    @Override
    public void setAlpha(int alpha) {
        textPaint.setAlpha(alpha);
    }


    @Override
    public void setColorFilter(ColorFilter cf) {
        textPaint.setColorFilter(cf);
    }


    @Override
    public int getOpacity() {
        return PixelFormat.TRANSLUCENT;
    }


    @Override
    public int getIntrinsicWidth() {
        return width;
    }


    @Override
    public int getIntrinsicHeight() {
        return height;
    }


    public static IShapeBuilder builder() {
        return new Builder();
    }


    public static class Builder implements IConfigBuilder, IShapeBuilder, IBuilder {


        private String text;


        private int color;


        private int borderThickness;


        private int width;


        private int height;


        private Typeface font;


        private RectShape shape;


        public int textColor;


        private int fontSize;


        private boolean isBold;


        private boolean toUpperCase;


        public float radius;


        private Builder() {
            text = "";
            color = Color.GRAY;
            textColor = Color.WHITE;
            borderThickness = 0;
            width = -1;
            height = -1;
            shape = new RectShape();
            font = Typeface.create("sans-serif-light", Typeface.NORMAL);
            fontSize = -1;
            isBold = false;
            toUpperCase = false;
        }


        public IConfigBuilder width(int width) {
            this.width = width;
            return this;
        }


        public IConfigBuilder height(int height) {
            this.height = height;
            return this;
        }


        public IConfigBuilder textColor(int color) {
            this.textColor = color;
            return this;
        }


        public IConfigBuilder withBorder(int thickness) {
            this.borderThickness = thickness;
            return this;
        }


        public IConfigBuilder useFont(Typeface font) {
            this.font = font;
            return this;
        }


        public IConfigBuilder fontSize(int size) {
            this.fontSize = size;
            return this;
        }


        public IConfigBuilder bold() {
            this.isBold = true;
            return this;
        }


        public IConfigBuilder toUpperCase() {
            this.toUpperCase = true;
            return this;
        }


        @Override
        public IConfigBuilder beginConfig() {
            return this;
        }


        @Override
        public IShapeBuilder endConfig() {
            return this;
        }


        @Override
        public IBuilder rect() {
            this.shape = new RectShape();
            return this;
        }


        @Override
        public IBuilder round() {
            this.shape = new OvalShape();
            return this;
        }


        @Override
        public IBuilder roundRect(int radius) {
            this.radius = radius;
            float[] radii = {radius, radius, radius, radius, radius, radius, radius, radius};
            this.shape = new RoundRectShape(radii, null, null);
            return this;
        }


        @Override
        public TextDrawable buildRect(String text, int color) {
            rect();
            return build(text, color);
        }


        @Override
        public TextDrawable buildRoundRect(String text, int color, int radius) {
            roundRect(radius);
            return build(text, color);
        }


        @Override
        public TextDrawable buildRound(String text, int color) {
            round();
            return build(text, color);
        }


        @Override
        public TextDrawable build(String text, int color) {
            this.color = color;
            this.text = text;
            return new TextDrawable(this);
        }
    }


    public interface IConfigBuilder {
        public IConfigBuilder width(int width);


        public IConfigBuilder height(int height);


        public IConfigBuilder textColor(int color);


        public IConfigBuilder withBorder(int thickness);


        public IConfigBuilder useFont(Typeface font);


        public IConfigBuilder fontSize(int size);


        public IConfigBuilder bold();


        public IConfigBuilder toUpperCase();


        public IShapeBuilder endConfig();
    }


    public static interface IBuilder {


        public TextDrawable build(String text, int color);
    }


    public static interface IShapeBuilder {


        public IConfigBuilder beginConfig();


        public IBuilder rect();


        public IBuilder round();


        public IBuilder roundRect(int radius);


        public TextDrawable buildRect(String text, int color);


        public TextDrawable buildRoundRect(String text, int color, int radius);


        public TextDrawable buildRound(String text, int color);
    }
}

相關推薦

android 圓形圖片裡面

需要的類裡面 private TextDrawable.IBuilder mDrawableBuilder; @Overridepublic void onCreate(Bundle savedInstanceState) {// TODO Auto-generated

Glide載入圓形圖片並且白色邊框(絕對實用)

1、建立一個類 /** * 載入圓形頭像帶白色邊框 */ public class GlideCircleWithBorder extends BitmapTransformation { private Paint mBorderPaint; priv

Android圓形圖片控制元件CircleImageView的使用

自定義CircleImageView繼承ImageView package com.zhoujian.circleimageview.view; import android.content.Context; import android.conten

android圓形圖片裁剪demo以及實現

Bitmap getBitmap() { try { // srcPic.getDrawingCache()獲取View截圖在某些情況下報錯了。 // 現在用一種新的獲取view中影象的方法取代getDrawingCache()方法. // 另:在使用createBi

Android圓形圖片不求人,自定義View實現(BitmapShader使用)

在很多APP當中,圓形的圖片是必不可少的元素,美觀大方。本文將帶領讀者去實現一個圓形圖片自定View,力求只用一個Java類來完成這件事情。 一、先上效果圖 二、實現思路 在定義View 的onMeasure()方法裡設定View的寬高相等,應該取寬高中的最小值。

Android圓形圖片CircleImageView的使用和分析

在專案開發中,我們經常需要用到圓形圖片效果,典型案例是使用者頭像的顯示。如圖所示。下面我們使用開源控制元件CircleImageView來實現該效果。CircleImageView專案下載地址:https://github.com/hdodenhof/CircleImage

android中畫圓形圖片的幾種辦法

http hub image art 鋸齒 tar ets oid tex 在開發中常常會有一些需求,比方顯示頭像,顯示一些特殊的需求,將圖片顯示成圓角或者圓形或者其它的一些形狀。可是往往我們手上的圖片或者從server獲取到的圖片都是方形的。這時候就須要我們自

Android神話級圓形圖片控制元件RoundImageView

原文地址:https://blog.csdn.net/u011192530/article/details/53836546   RoundImageView是在不修改ImageView原有繪圖邏輯的情況下實現的圓形特性,完全相容ImageView的所有特性。 無論你的影象控制元件

Android下拉框圖片

MainActivity 類  package com.example.android_06; /** * 上課程式碼 */ import android.support.v7.app.AppCompatActivity; import android.os.Bundle; i

Android 列表展示簡單Fresco圓形圖片

1.在build.gradle首先匯入依賴 implementation 'com.facebook.fresco:fresco:1.11.0' 2.全域性初始化 @Override public void onCreate() { super.o

輕量級顯示圓形圖片 CircleView-Android

CircleView-Android 詳細介紹 CircleView,可以將圖片圓形顯示的View,實現方式很簡單,做這個控制元件就是為了可以直接方便的顯示圓形圖片,在顯示的時候,提供了更多的選擇,比如下面講到的偏移顯示。 使用方法 在build.gradle檔案中加上

Android 將Bitmap轉換成圓形圖片的方法

public static Bitmap toRoundBitmap(Bitmap bitmap) { // 前面同上,繪製圖像分別需要bitmap,canvas,paint物件 bitmap = Bitmap.createScaledBitmap(bitmap

android圓形頭像、圖片

public static Bitmap toRoundImage(Bitmap bitmap) { float roundPx = 0; int rectStartX=0; int rectStartY=0; Bitmap output = Bitmap.crea

Glide載入圓形圖片白色邊框

1.匯入Glide依賴 compile 'com.github.bumptech.glide:glide:4.0.0-RC1' 2.建立一個類 繼承BitmapTransformation /**  * 載入圓形頭像帶白色邊框  */ public class Glid

Android Glide設定預設圖片、異常圖片圓形圖片

Android Glide4 非同步圖片框架 前言: 在專案開發中,是需要經常用到圓形圖片的,設定預設圖片,設定資源圖片等等。 若是,異常圖片,預設圖片都需要美工妹子做成圓形圖片,無疑增加了美工妹子的工作量。本著當活雷鋒的思想,程式設計師能搞定的事

Android關於Glide載入圓形圖片之第一次載入時出現不顯示的問題

使用Glide關鍵程式碼: Glide.with(getActivity()).load(url) .error(R.drawable.he

Android 使用Glide動態載入圓形圖片和圓角圖片

Glide我們都不陌生了,有時我們需要把載入下來的圖片轉成圓角或者圓形的圖片,怎麼處理呢,Glide原生沒有這個方法,於是我拓展了BitmapTransformation來實現這個功能。 效果圖: Glide是預設本地儲存的,但重複載入的時候,是不需要重

Android實現圓形Imageview,白色邊框

最近做了個圓形Imageview,外面有白色邊框 有需要的同學可以看看,效果如下 附上實現程式碼 RoundImageView: public class RoundImageView

Android開發卷——設定圓形頭像,Android擷取圓形圖片

在有一些程式開發中,有時候會用到圓形,擷取一張圖片的一部分圓形,作為頭像或者其他. 本例項就是截圖圓形,設定頭像的.      首先講解一些程式碼 <ImageView android:id="@+id/screenshot_img" android:lay

Android利用glide載入圓形圖片,頭像的實現

主要是用到了RoundedBitmapDrawable這個類是Drawable的一個子抽象類 可以實現從檔案路徑,輸入流或bitmap 的物件都可以轉換成圓形,或圓角,就不用使用第三方了,很方便 如