原理很簡單, 就是將輸入的String字串map到對應的圖片就好了

private Bitmap convertString2Drawable(String number){
    //圖片資源陣列
    int[] numberId = {
        R.drawable.ic_num_0,
        R.drawable.ic_num_1,
        R.drawable.ic_num_2,
        R.drawable.ic_num_3,
        R.drawable.ic_num_4,
        R.drawable.ic_num_5,
        R.drawable.ic_num_6,
        R.drawable.ic_num_7,
        R.drawable.ic_num_8,
        R.drawable.ic_num_9
    };
    //將String轉成char陣列
    char[] charArray = number.toCharArray();

    //計算圖片的寬和高
    Resources res = getResources();
    Bitmap[] bmps = new Bitmap[charArray.length];
    int totalWidth = 0;
    int bmpHeight = 0;
    for(int i = 0; i < charArray.length; i++){
        bmps[i] = BitmapFactory.decodeResource(res, numberId[charArray[i] - '0']);
        totalWidth += bmps[i].getWidth();
        if(bmps[i].getHeight() > bmpHeight) bmpHeight = bmps[i].getHeight();
    }

    //建立bitmap的總大小
    Bitmap result = Bitmap.createBitmap(totalWidth, bmpHeight, Bitmap.Config.ARGB_8888);
    
    //把數字畫上去
    Canvas canvas = new Canvas(result);
    int offset_x = 0;
    for(int i = 0; i < charArray.length; i++){
        canvas.drawBitmap(bmps[i], offset_x, 0, null);
        offset_x += bmps[i].getWidth();
    }
    return result;
}

舉個在在activity呼叫該函數的例子

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);

    ImageView img = findViewById(R.id.img);
    img.setImageBitmap(convertString2Drawable("12345"));
}

也可以參考 Android 圖片組合https://stackoverflow.com/questions/10640204/android-combine-pictures

RX1226 發表在 痞客邦 留言(0) 人氣()