Android:相对于固定大小的画布

时间:2015-10-14 08:08:35

标签: android canvas android-canvas android-drawable dpi

我尝试以预定义的尺寸创建自定义位图,其中包含一些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);

但是每个设备上的字体看起来都不一样..

谢谢你的帮助。

注意: 我的目标是从动态创建的元素中将图像保存到手机内存中(未在屏幕上显示) 这是我试图在画布上创建的图像: Desired bitmap to be saved

0 个答案:

没有答案