如何创建可以滚动的大图像

时间:2013-03-08 04:36:57

标签: java android android-layout android-canvas

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

如果我理解正确的话:

  1. 创建位图,
  2. 创建我的画布(大于屏幕分辨率)
  3. 抓取缓存的位图和
  4. 渲染位图与画布。
  5. 但是我缺乏在现有代码中实现这一点的知识。我现有的代码只是创建了一个非常大的画布(我没有定义边界,我只是开始绘图)。我的主要课程如下:

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

1 个答案:

答案 0 :(得分:0)

嗯,我很害怕你没有明白链接主题。这与你试图实现的完全不同。

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

你已经有了构造的位图吗? (或者至少你可以使用:

从资源加载它

BitmapFactory.decode ...(根据您输入的资源或文件,请参阅documentation here

为了在屏幕内滚动,您的画布不一定非常大。画布的大小是视图的大小(此处是屏幕的大小),但您将根据要应用的滚动位置绘制位图。

见:canvas.drawBitmap() 's documentationcanvas.translate也可以提供帮助。

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

希望有所帮助。

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

API Demos -> Graphics -> TouchPaint