gpt4 book ai didi

java - 在大 Canvas 上滚动

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:00 24 4
gpt4 key购买 nike

我需要一些帮助来了解在 Android 中滚动绘制到 Canvas 上的项目的基础知识。假设我想创建一个时间线,其中 0 处的时间是可视化的顶部,并且随着时间的增加,时间线继续呈现在前一个点的下方。如果我想在 Android 上渲染它,我知道我可以通过覆盖 onDraw() 在 Canvas 上简单地创建一堆项目。但是,让我们假设可视化比屏幕允许的要大。

例如,在下面的第一张图片中,大黑框包含我渲染的整个 Canvas 。我创建了一条垂直上下延伸的蓝线以及几个黄色、绿色和蓝色的矩形。红色框表示正在呈现可视化的 Android 屏幕。当它最初打开时,所有项目都被绘制,但只有包含在红色框中的项目显示在屏幕上。

Before_Scroll

现在,如果用户向下滚动,最初出现在红框下方的项目是可见的,而超出红框范围的项目将不再可见,如第二张图片所示。

After_Scroll

我相信我需要使用滚动条,但我完全不知道该怎么做。我已阅读此页面 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 View 。在 onMeasure 中计算该 View 所需的高度。

@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, 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);
}
}

关于java - 在大 Canvas 上滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15892974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com