java – 滚动大画布

前端之家收集整理的这篇文章主要介绍了java – 滚动大画布前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要一些帮助,了解在 Android中绘制到画布上的项目滚动的基础知识.假设我想创建一个时间轴,其中0时间是可视化的顶部,随着时间的增加,时间轴继续呈现在先前的点之上.如果我想在Android上渲染,我知道我可以通过覆盖onDraw()来简单地在画布上创建一堆项目.但是,假设可视化大于屏幕允许.

例如在下面的第一张照片中,当我渲染它时,大黑框包含整个画布.我创建一条蓝线,上下垂直运行,还有几个黄色,绿色和蓝色的矩形.红色框代表呈现可视化的Android屏幕.最初打开时,所有项目都将被绘制,但只有红色框中包含的项目才会显示在屏幕上.

现在如果用户要向下滚动,最初出现在红色框下方的项目在视图中,而已经超出红色框的限制的项目不再可见,如第二张图片所示.

我相信我需要使用scrollables,但是我很失去了如何做.我已经阅读了这个页面http://developer.android.com/training/custom-views/custom-drawing.html,解释如何创建自己的客户图像,这个页面http://developer.android.com/training/custom-views/making-interactive.html解释如何使UI互动,但我想我缺少一些东西.

说明这个问题的一个示例代码(这是基本的,假设有逻辑规定了框/线走的等等)如下:

package com.example.scrolltest;

import com.example.scrolltest.Draw;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;

public class MainActivity extends Activity {
    Draw draw;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    draw = new Draw(this);
    draw.setBackgroundColor(Color.WHITE);
    setContentView(draw);
    }
}

package com.example.scrolltest;


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;


public class Draw extends View {
    Paint paint = new Paint();

    public Draw(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {

        paint.setColor(Color.GREEN);
        canvas.drawRect(30,30,90,200,paint);
        paint.setColor(Color.BLUE);

        canvas.drawLine(100,20,100,1900,paint);

        paint.setColor(Color.GREEN);
        canvas.drawRect(200,2000,400,3000,paint);
        }
}

我无法想像的是,我如何使用可滚动的方式向下滚动到屏幕外的矩形.我也不确定我是否正确启动,或者应该使用drawables …

解决方法

简单方法(如果所需的高度不是很大).

使用ScrollView并在其中添加您的Draw视图.在onMeasure中计算该视图所需的高度.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

draw = new Draw(this);
draw.setBackgroundColor(Color.WHITE);
ScrollView scrollView = new ScrollView(this);
scrollView.addView(draw);
setContentView(scrollView);
}

public class Draw extends View {
        Paint paint = new Paint();

        public Draw(Context context) {
            super(context);            
        }

        @Override
        protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
            // Compute the height required to render the view
            // Assume Width will always be MATCH_PARENT.
            int width = MeasureSpec.getSize(widthMeasureSpec);
            int height = 3000 + 50; // Since 3000 is bottom of last Rect to be drawn added and 50 for padding.
            setMeasuredDimension(width,height);
        }

        @Override
        public void onDraw(Canvas canvas) {

            paint.setColor(Color.GREEN);
            canvas.drawRect(30,paint);
            paint.setColor(Color.BLUE);

            canvas.drawLine(100,paint);

            paint.setColor(Color.GREEN);
            canvas.drawRect(200,paint);
            }
    }

猜你在找的Java相关文章