Android:运行图形的滚动条

Android:运行图形的滚动条,android,graph,custom-controls,scrollbar,dynamic-data,Android,Graph,Custom Controls,Scrollbar,Dynamic Data,我有一个自定义视图,它绘制了一个运行图——大小与时间的关系。现在我想实现一个自定义滚动条,这样我就可以查看屏幕外的过去数据。我可以得到这些数据。我只需要用户选择的%偏移量 任何关于实施的帮助/建议都是有帮助的 来自自定义视图的onDraw方法的代码片段 公共空白onDraw(画布){ inttotalpts=data.size(); 缩放=getWidth()/(浮点)最大点; 列表显示=新建ArrayList(); int initial=1; 如果(totalpts>maxpoints){

我有一个自定义视图,它绘制了一个运行图——大小与时间的关系。现在我想实现一个自定义滚动条,这样我就可以查看屏幕外的过去数据。我可以得到这些数据。我只需要用户选择的%偏移量

任何关于实施的帮助/建议都是有帮助的

来自自定义视图的onDraw方法的代码片段

公共空白onDraw(画布){

inttotalpts=data.size();
缩放=getWidth()/(浮点)最大点;
列表显示=新建ArrayList();
int initial=1;
如果(totalpts>maxpoints){
初始=总点-最大点;
display=data.subList(初始值,data.size()-1);
}否则{
显示=数据;
}
int size=display.size();
数据开始=空;
浮点x1=0,x2=0,x=0;
如果(大小>1){
x1=getWidth();
start=display.get(display.size()-1);
对于(int i=display.size()-1;i>=0;i--){
数据停止=显示。获取(i);
x=x1;
x1-=(停止x*刻度/1000);
画布绘制线(x,开始点Y,x1,停止点Y,绘制1);
开始=停止;
}
}
}

尝试将自定义控件放在(假设希望它水平滚动)中,否则使用),将控件的宽度设置为“WRAP\u CONTENT”,将HoizontalScrollView设置为“FILL\u PARENT”。如果看不到自定义视图的代码,就很难知道是否需要修改宽度计算以使其正常工作。

尝试将自定义控件放在a中(假设希望它水平滚动),否则使用),将控件的宽度设置为“WRAP\u CONTENT”,将HoizontalScrollView设置为“填充父对象”。如果看不到自定义视图的代码,就很难知道是否需要对宽度计算进行一些修改以使其正常工作。

谢谢标记。但我不认为我可以添加HorizontalScrollView,因为在任何时候,我的draw方法都只绘制可以在指定宽度内的点。我已经在问题中添加了所需的代码片段。还有什么我能做的吗?或者其他任何实现draw的方法?对不起,我真的不明白你想做什么,在这种情况下。谢谢Mark。但我不认为我可以添加HorizontalScrollView,因为在任何时候,我的draw方法都只绘制可以在指定宽度内的点。我已经在问题中添加了所需的代码片段。还有什么我能做的吗?或者其他任何实现draw的方法?对不起,我真的不明白在这种情况下,你想做什么。
    int totalpts = data.size();
    scale = getWidth() / (float) maxpoints;
    List<Data> display = new ArrayList<Data>();
    int initial = 1;
    if (totalpts > maxpoints) {
        initial = totalpts - maxpoints;

            display = data.subList(initial, data.size() - 1);

    } else {

            display = data;

    }


    int size = display.size();
    Data start = null;
    float x1 = 0, x2 = 0, x = 0;

    if (size > 1) {
        x1 = getWidth();
        start = display.get(display.size() - 1);
        for (int i = display.size() - 1; i >= 0; i--) {
            Data stop = display.get(i);
            x = x1;
            x1 -= (stop.x * scale / 1000);

            canvas.drawLine(x, start.Y, x1, stop.Y, paint1);

            start = stop;
        }
    }
}