我创建了一个自定义视图(显示),它接受创建半静态(很少更改)位图的非视图图标。这个想法是将许多图标传递给显示以打印到其画布上。我的问题是我无法让显示器将图标位图实际绘制到其画布中。
下面的代码是我所拥有的一个工作示例。(通过工作,我的意思是正确执行,而不是打印我想要的内容)
public class AndroidTestoActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout fl = new FrameLayout(this);
Display tv = new Display(this);
tv.setLayoutParams(new LayoutParams(200, 200));
fl.addView(tv);
setContentView(fl);
}
public class Display extends View {
Paint vPaint = new Paint();
Icon item = new Icon();
public Display(Context context) {
super(context);
vPaint.setStyle(Paint.Style.FILL_AND_STROKE);
vPaint.setColor(0x0ff000000);
setBackgroundColor(0xffffffff);
}
@Override public void onDraw(Canvas canvas) {
canvas.scale(200, 200);
item.onDraw(canvas);
canvas.drawLine(0.0f, 0.0f, 1.0f, 1.0f, vPaint);
}
}
public class Icon {
Bitmap myImage;
Paint mPaint = new Paint();
public Icon() {
myImage = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
mPaint.setStyle(Style.FILL);
mPaint.setColor(0xffff0000);
Canvas c = new Canvas(myImage);
c.scale(50, 50);
c.drawCircle(0.5f, 0.5f, 0.5f, mPaint);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(myImage, 0, 0, null);
}
}
}
这段代码应该打印出从左上角到右下角的一条线,并从 0,0 到 50, 50 绘制一个 50px 直径的圆。相反,我得到的只是这条线。但是,如果我将位图打印到文件中,该文件会准确地输出它应该输出的内容。
有没有人知道发生了什么?
编辑
为了澄清我的问题,我正在创建一个比 DisplayView 小得多的位图。当我尝试将位图绘制到 DisplayView 中时,位图根本不是我绘制的,并且从未适当地缩放。为什么画布不能正确绘制位图?
更新
在 Diplay 的 onDraw 方法中,我将行items.onDraw(canvas);
移到 before canvas.scale(200, 200);
。现在测试圈绘制正确。如此简单的改变是做什么来完全忽略以以前的方式绘制圆圈的?