package jackpal.androidterm.shortcuts; import android.graphics. Bitmap; import android.graphics. Bitmap.Config; import android.graphics. Canvas; import android.graphics. Paint; import android.graphics. Paint.Align; import android.graphics. Rect; import android.util. FloatMath; import java.lang. Float; public class TextIcon { //////////////////////////////////////////////////////////// public static Bitmap getTextIcon(String text, int color, int width, int height) { text= text. trim(); String lines[]= text.split("\\s*\n\\s*"); int nLines= lines.length; Rect R= new Rect(); Paint p= new Paint(Paint.ANTI_ALIAS_FLAG); p. setShadowLayer(2, 10, 10, 0xFF000000); p. setColor(color); p. setSubpixelText(true); p. setTextSize(256); p. setTextAlign(Align.CENTER); float HH[]= new float[nLines]; float H= 0f; float W= 0f; for(int i=0; i<nLines; ++i) { p. getTextBounds(lines[i], 0, lines[i].length(), R); float h= Float.valueOf(Math.abs(R.top-R.bottom)); float w= Float.valueOf(Math.abs(R.right-R.left)); if(nLines>1) h+=0.1f*h; // Add space between lines. HH[i]= h; H+= h; if(w>W) W=w; } float f= ((float)width)*H/((float)height); int hBitmap= (int)H; int wBitmap= (int)W; if(W<f) {wBitmap=(int)FloatMath.ceil(f); hBitmap=(int)FloatMath.ceil(H);} else {wBitmap=(int)FloatMath.ceil(W); hBitmap=(int)FloatMath.ceil(height*wBitmap/width);} Bitmap b= Bitmap.createBitmap(wBitmap, hBitmap, Config.ARGB_8888); b. setDensity(Bitmap.DENSITY_NONE); Canvas c= new Canvas(b); W=wBitmap/2f; float top= hBitmap/2f-H/2f+HH[0]/2f; for(int i=0; i<nLines; ++i) { top+= HH[i]/2f; c. drawText(lines[i], W, top, p); top+= HH[i]/2f; } return( Bitmap.createScaledBitmap( b , width , height , true ) ); } //////////////////////////////////////////////////////////// }