我需要一些帮助,了解在
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); } }