我尝试以预定义的尺寸创建自定义位图,其中包含一些Drawables和其他图形元素。
Canvas是我使用的方法,但我有一些drawables大小的问题。
当我加载drawable时,Android会将其缩放以匹配手机DPI,因此我无法将其绘制到画布上,因为它太大了。 我需要调整那个drawable以正确调整我的画布。
ImageView ivIcon = new ImageView(mContext);
ivIcon.setImageResource(R.drawable.some_image);
ivIcon.setDrawingCacheEnabled(true);
ivIcon.measure(MeasureSpec.makeMeasureSpec(50, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(50, MeasureSpec.EXACTLY)); // tried out some values and 50 seems to be OK.
ivIcon.layout(0, 0, ivIcon.getMeasuredWidth(), ivIcon.getMeasuredHeight());
ivIcon.buildDrawingCache(true);
Log.d("TEST","Icon Size Before W="+ivIcon.getWidth() + " H="+ivIcon.getHeight());
Bitmap iconBitmap = Bitmap.createBitmap(ivIcon.getDrawingCache());
Log.d("TEST","Icon Size After W="+iconBitmap.getWidth() + " H="+iconBitmap.getHeight());
ivIcon.setDrawingCacheEnabled(false);
canvas.drawBitmap(iconBitmap, pos_X, pos_Y, null);
这个解决方案有效,但我需要它是通用的,画布大小作为输入。
如何正确缩放元素?
我还有一个问题是在绘制到同一画布上的textview上设置字体大小。 我使用此代码来设置大小:
LayoutInflater inf = LayoutInflater.from(mContext);
RelativeLayout rlCursorTempTag = (RelativeLayout) inf.inflate(R.layout.layout_tag, null);
TextView tvTempTag = (TextView) rlCursorTempTag.findViewById(R.id.textView_temp);
tvTempTag.setText(sTemperature);
Typeface my_font = Typeface.createFromAsset(mContext.getAssets(),"fonts/browa.ttf");
tvTempTag.setTextSize(13);
tvTempTag.setTypeface(my_font);
但是每个设备上的字体看起来都不一样..
谢谢你的帮助。