目前我有一个类根据sqlite文件的内容动态绘制一堆正方形。由于数据非常大,因此绘图比屏幕大许多倍。我已经阅读了很多提议的方法来做到这一点,并且不确定最好的方法。由于我在渲染后不会更改图像(只需要在重启时动态渲染它),列出的第一个答案here似乎是最好的,但我还没有完全理解如何这样做。
如果我理解正确的话:
但是我缺乏在现有代码中实现这一点的知识。我现有的代码只是创建了一个非常大的画布(我没有定义边界,我只是开始绘图)。我的主要课程如下:
package com.example.drawdemo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
public class DrawDemo extends Activity {
DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
setContentView(drawView);
}
}
DrawView类是这样的:
public class DrawView extends View {
public DrawView(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
//LOTS OF CODE HERE to figure out how to render rectangles through loops
// similar to lines like this
canvas.drawRect(xStart, rectYPointer, xEnd, rectYPointer+rectSize, paint);
// or this
canvas.drawText(String.valueOf(rectSize), 130, rectYPointer*2, paint);
}
}
我采用正确方法的方法是允许我向下滚动并看到比android屏幕更大的大图像吗?如果是这样,我如何迁移我的代码以符合我认为是正确方法的答案中列出的方法?
答案 0 :(得分:0)
嗯,我很害怕你没有明白链接主题。这与你试图实现的完全不同。
这个主题是关于在稍后使用的位图上绘制的。
你已经有了构造的位图吗? (或者至少你可以使用:
从资源加载它BitmapFactory.decode ...(根据您输入的资源或文件,请参阅documentation here)
为了在屏幕内滚动,您的画布不一定非常大。画布的大小是视图的大小(此处是屏幕的大小),但您将根据要应用的滚动位置绘制位图。
见:canvas.drawBitmap() 's documentation 而canvas.translate也可以提供帮助。
基本上你想要的是:在你的视图中获取一个加载位图的引用(使用bitmapdecode)。 然后在onDraw中,在视图的画布上绘制位图以在屏幕上显示它。 然后,要添加滚动效果,请尝试在绘制时更改画布的y平移。
希望有所帮助。有关在画布上绘图的更多信息(以及一个很好的示例),我建议您打开API演示项目源代码:
API Demos -> Graphics -> TouchPaint