加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 滚动大画布

发布时间:2020-12-14 16:42:43 所属栏目:Java 来源:网络整理
导读:我需要一些帮助,了解在 Android中绘制到画布上的项目滚动的基础知识.假设我想创建一个时间轴,其中0时间是可视化的顶部,随着时间的增加,时间轴继续呈现在先前的点之上.如果我想在Android上渲染,我知道我可以通过覆盖onDraw()来简单地在画布上创建一堆项目.但
我需要一些帮助,了解在 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);
            }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读