2017-05-18 4 views
0

私はテキストからビットマップを取得するために以下の関数を使用しています。 テキストをビットマップの中央に配置することができません。 以下のすべてのケースを中央に配置する単一のルール。Androidビットマップがセンターテキストに調整

"I" "W" "WM" "IQ"

Bitmap DevImjBitmapFrmTxtFnc(String TxtSrgPsgVal) 
{ 
    int TxtSyzVal = 100; 
    Paint PenPytVaj = new Paint(ANTI_ALIAS_FLAG); 
    PenPytVaj.setTextSize(TxtSyzVal); 
    PenPytVaj.setColor(Color.BLUE); 
    PenPytVaj.setTextAlign(Paint.Align.CENTER); 

    float TxtTitYcoVal = -PenPytVaj.ascent(); // ascent() is negative 
    int ImjWytVal = (int) (PenPytVaj.measureText(TxtSrgPsgVal) + 0.0f); // round 
    int ImjHytVal = (int) (TxtTitYcoVal + PenPytVaj.descent() + 0.0f); 
    Bitmap ImjBitmapVaj = Bitmap.createBitmap(ImjWytVal + TxtSyzVal, ImjHytVal + TxtSyzVal, Bitmap.Config.ARGB_8888); 

    Canvas ImjCanvasVaj = new Canvas(ImjBitmapVaj); 
    ImjCanvasVaj.drawText(TxtSrgPsgVal, 0, TxtTitYcoVal, PenPytVaj); 
    return ImjBitmapVaj; 
} 

が親切に使用される関数と変数の命名の差分道を無視します。

答えて

1

1日の闘いの後、私はこのテキストセンターを手に入れました。 https://stackoverflow.com/a/32081250/5078763
リンク以下

の助けを借りて
は、これは私が私のように苦労しない希望する者すべてを支援することです。

Bitmap DevImjBmpFrmTxtFnc(String TxtSrgPsgVal) 
{ 
    int TxtSyzVal = 100; 
    TextPaint PenPytVaj = new TextPaint(ANTI_ALIAS_FLAG); 
    PenPytVaj.setTextSize(TxtSyzVal); 
    PenPytVaj.setColor(Color.BLACK); 
    PenPytVaj.setTextAlign(Paint.Align.LEFT); 

    Rect TxtRctVar = new Rect(); 
    PenPytVaj.getTextBounds(TxtSrgPsgVal, 0, TxtSrgPsgVal.length(), TxtRctVar); 
    Bitmap TxtImjBmpVar = Bitmap.createBitmap(TxtSyzVal * 2, TxtSyzVal * 2, Bitmap.Config.ARGB_8888); 

    Canvas ImjCanvasVaj = new Canvas(TxtImjBmpVar); 
    float XcoVal = ImjCanvasVaj.getWidth()/2 - TxtRctVar.width()/2 - TxtRctVar.left; 
    float YcoVal = ImjCanvasVaj.getHeight()/2 + TxtRctVar.height()/2 - TxtRctVar.bottom; 
    ImjCanvasVaj.drawText(TxtSrgPsgVal, XcoVal, YcoVal, PenPytVaj); 
    return TxtImjBmpVar; 
}