【问题标题】:Drawing image file to SurfaceView returning blank将图像文件绘制到 SurfaceView 返回空白
【发布时间】:2013-12-02 09:28:36
【问题描述】:

我想将图像文件绘制到 SurfaceView,但是当我运行我的代码时,SurfaceView 完全空白

protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit);
    displayPicture();
}

private void displayPicture(){
    SurfaceView sv = (SurfaceView) findViewById(R.id.svEditPic);
    Bitmap bmp = BitmapFactory.decodeFile(path);
    Canvas c = new Canvas();
    c.drawBitmap(bmp, 0, 0, null);
    sv.draw(c);
}

这似乎不起作用。有什么解决办法吗?

【问题讨论】:

  • 上面的代码放在哪里?请显示更多代码。
  • 已更新。它放在 onCreate 方法中。
  • 在画布上设置刹车点 c = new Canvas();并检查图像是否已加载。
  • 检查表面信息创建=false formatChanged=false sizeChanged=false visible=false visibleChanged=true surfaceChanged=true realSizeChanged=false redrawNeeded=false left=false top=false

标签: java android eclipse adt surfaceview


【解决方案1】:

如果你的绘图类扩展了View,你需要实现:

@Override
protected void onDraw(Canvas canvas) {}

然后在那里做你的绘画工作。

检查您的 android sdk 文件夹中的 BitmapDecode.java 示例。另外,请阅读docs

【讨论】:

  • 表面不是一劳永逸的绘制元素,您需要根据每一帧的状态重新绘制它们。帧速率可以根据性能固定,也可以仅在调用时固定。遵循@Melquiades 的建议。
【解决方案2】:

试试这个, 分别为screenPts.x, screenPts.y 使用屏幕 X、Y 位置的一些值

SurfaceView sv = (SurfaceView) findViewById(R.id.svEditPic);
    Bitmap bmp = BitmapFactory.decodeFile(path);
    Canvas c = new Canvas();
    c.drawBitmap(bmp, screenPts.x, screenPts.y, null);
    bmp.recycle();
    sv.draw(c);

【讨论】:

  • 还是空白。如果 x 和 y 都是 0 那么它应该在左上角打印图片,对吗?我不应该改变坐标。
  • 并对 screenPts.x、screenPts.y 使用一些不同的值
  • 同意@Melquiades 的建议。
【解决方案3】:
    iv = (ImageView) findViewById(R.id.ivEdit);
    Bitmap bmp = BitmapFactory.decodeFile(path);
    Bitmap temp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565);
    c = new Canvas(temp);
    c.drawBitmap(bmp, 0, 0, null);
    iv.setImageBitmap(temp);

经过一番广泛的搜索,我发现 SurfaceView.draw(canvas) 不会自己绘制。事实上,它的作用恰恰相反。它正在画布上。我已经用 ImageView 替换了 SurfaceView,这对于我正在做的事情会更实用。

【讨论】:

    猜你喜欢
    • 2021-12-16
    • 2022-01-06
    • 1970-01-01
    • 2015-10-28
    • 2014-03-27
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多