0

目前我有一个类可以根据 sqlite 文件的内容动态绘制一堆正方形。由于数据非常大,绘图比屏幕大很多倍。我已经阅读了很多建议的方法来做到这一点,并且不确定最好的方法。因为我在渲染后不会更改图像(只需要在重新启动时动态渲染它),这里列出的第一个答案似乎是最好的,但我并不完全理解如何这样做。

如果我理解正确,我:

  1. 创建位图,
  2. 创建我的画布(大于屏幕分辨率)
  3. 抓取缓存的位图并
  4. 渲染位图与画布。

但是我缺乏在现有代码中实现这一点的知识。我现有的代码只是创建了一个非常大的画布(我没有定义边界,我只是开始绘制)。我的主要课程如下所示:

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 屏幕更大的大图像?如果是这样,我如何迁移我的代码以符合我认为是正确方法的答案中列出的方法?

4

1 回答 1

0

好吧,我很害怕你没有明白链接主题的重点。这与您尝试实现的目标完全不同。

本主题是关于在稍后使用的位图上绘图。

你已经有一个构建的位图了吗?(或者至少您可以使用以下资源从资源中加载它:

BitmapFactory.decode...(根据您输入的资源或文件,请参阅此处的文档

您的画布不必很大就可以在屏幕内滚动。画布的大小是视图的大小(这里是屏幕的大小),但您将根据要应用的滚动位置绘制位图。

请参阅: canvas.drawBitmap() 的文档canvas.translate也可以提供帮助。

基本上你想要的是:在你的视图中获取加载位图的引用(使用 bitmapdecode)。然后在 onDraw 中,在视图的画布上绘制位图以将其显示在屏幕上。然后,要添加滚动效果,请尝试在画布上绘制时更改画布的 y 平移。

希望有帮助。

有关在画布上绘图的更多信息(以及一个很好的示例),我建议您打开 API 演示项目源代码:

API Demos -> Graphics -> TouchPaint
于 2013-03-09T09:05:36.113 回答