Android layout 如何动态更新一个图形在另一个图形中的缩放/滑动(此处使用listview在同一屏幕中显示两个图形)

Android layout 如何动态更新一个图形在另一个图形中的缩放/滑动(此处使用listview在同一屏幕中显示两个图形),android-layout,androidplot,Android Layout,Androidplot,我使用ListView在同一屏幕上显示两个图形,下面是代码 class MultiGraphAdapter extends ArrayAdapter<View> { public MultiGraphAdapter(Context context, int resId, List<View> views) { super(context, resId, views); } @Override public int getC

我使用ListView在同一屏幕上显示两个图形,下面是代码

class MultiGraphAdapter extends ArrayAdapter<View> {
    public MultiGraphAdapter(Context context, int resId, List<View> views) {
        super(context, resId, views);
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public int getViewTypeCount() {
        return 2;
    }

    @Override
    public int getItemViewType(int position) {
        return position % 2;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inf = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        mView = convertView;
        if (mView == null) {
            mView = inf.inflate(R.layout.multi_graph_items, parent, false);
        }
        mGraphPlotBattery = (MultitouchXYPlot) mView
                .findViewById(R.id.graphRxXYPlot);
        mCurrentTimeInterval = DateTimeUtiliy.ONE_MIN_IN_MS;
        Log.i("tag","positions="+position);
        if (position == 0) {
            setVoltGraphFormat(mCurrentTimeInterval);
        } else {
            setTempGraphFormat(mCurrentTimeInterval);
        }
        return mView;
    }
}
类multigraphhadapter扩展了ArrayAdapter{
公共multigraphhadapter(上下文上下文、int resId、列表视图){
超级(上下文、剩余、视图);
}
@凌驾
public int getCount(){
返回2;
}
@凌驾
public int getViewTypeCount(){
返回2;
}
@凌驾
public int getItemViewType(int位置){
返回位置%2;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutInflater inf=(LayoutInflater)getContext()
.getSystemService(上下文布局\充气机\服务);
mView=convertView;
if(mView==null){
mView=inf.inflate(R.layout.multi\u graph\u items,parent,false);
}
mGraphPlotBattery=(多点触摸XYPlot)mView
.findViewById(R.id.graphRxXYPlot);
mCurrentTimeInterval=DateTimeUtility.1_MIN_IN_MS;
Log.i(“标签”、“位置=“+位置”);
如果(位置==0){
设置电压表格式(mCurrentTimeInterval);
}否则{
setTempGraphFormat(mCurrentTimeInterval);
}
返回mView;
}
}
}

下面的代码用于绘制图形

private void setTempGraphFormat(int timeInterval) {

    mBarTempFormater = new LineAndPointFormatter(Color.rgb(0, 0, 255),
            null, null, null);
    mGraphPlotBattery.addSeries(mTempSeries, mBarTempFormater);
    setGraphLayout("Temperature", 2, 2, 600);
}

private void setVoltGraphFormat(int timeInterval) {

    mBarVoltFormater = new LineAndPointFormatter(Color.rgb(0, 0, 255),
            null, null, null);
    mGraphPlotBattery.addSeries(mVoltageSeries, mBarVoltFormater);
    setGraphLayout("Voltage", 2, 2, 6000);
}

@SuppressLint("SimpleDateFormat")
private void setGraphLayout(String textTitle, int thicksPerDomain,
        int thicksPerRange, int maxValue) {
    mGraphPlotBattery.getGraphWidget().setMargins(15, 10, 20, 20);
    mGraphPlotBattery.getGraphWidget().setRangeValueFormat(
            new DecimalFormat("0"));
    mGraphPlotBattery
            .setDomainValueFormat(new SimpleDateFormat("HH:mm:ss"));
    mGraphPlotBattery.getTitleWidget().setWidth(250);
    mGraphPlotBattery.getGraphWidget()
            .setTicksPerRangeLabel(thicksPerRange);
    mGraphPlotBattery.getGraphWidget().setTicksPerDomainLabel(
            thicksPerDomain);
    mGraphPlotBattery.setDomainLabel("Time");
    mGraphPlotBattery.setRangeLabel(textTitle);
    mGraphPlotBattery.setRangeBoundaries(0, BoundaryMode.FIXED, maxValue,
            BoundaryMode.FIXED);
    setGraphLayoutDimensions();
}


private void scroll(float pan) {
    double calculatedMinX = getCalculatedMinX().doubleValue();
    double calculatedMaxX = getCalculatedMaxX().doubleValue();
    final double domainSpan = calculatedMaxX - calculatedMinX;
    final double step = domainSpan / getWidth();
    final double offset = pan * step;

    newMinX = calculatedMinX + offset;
    newMaxX = calculatedMaxX + offset;
    Log.d("test", "scroll x"+newMinX+" zoom y "+newMaxX);
}

private void zoom(float scale) {
    if (Float.isInfinite(scale) || Float.isNaN(scale)
            || (scale > -0.001 && scale < 0.001)) {
        return;
    }
    Log.d("test", "zoom x"+newMinX+" zoom y "+newMaxX);

    double calculatedMinX = getCalculatedMinX().doubleValue();
    double calculatedMaxX = getCalculatedMaxX().doubleValue();
    final double domainSpan = calculatedMaxX - calculatedMinX;
    final double domainMidPoint = calculatedMaxX - domainSpan / 2.0f;
    final double offset = domainSpan * scale / 2.0f;
    newMinX = domainMidPoint - offset;
    newMaxX = domainMidPoint + offset;
}
private void setTempGraphFormat(int-timeInterval){
MBartempFormatter=新的LineAndPointFormatter(Color.rgb(0,0,255)),
空,空,空);
mGraphPlotBattery.addSeries(mTempSeries、MBartemFormatter);
设置图形布局(“温度”,2600);
}
私有void setVoltGraphFormat(整数时间间隔){
MBarVoltFormatter=新的LineAndPointFormatter(Color.rgb(0,0,255)),
空,空,空);
mGraphPlotBattery.addSeries(mVoltageSeries、MBarVoltFormatter);
设置图形布局(“电压”,2,2,6000);
}
@SuppressLint(“SimpleDataFormat”)
私有void setGraphLayout(字符串textTitle,int-thicksPerDomain,
int thicksPerRange,int maxValue){
mGraphPlotBattery.getGraphWidget().setMargins(15,10,20,20);
mGraphPlotBattery.getGraphWidget().setRangeValueFormat(
新的十进制格式(“0”);
电池
.setDomainValueFormat(新的SimpleDataFormat(“HH:mm:ss”);
mGraphPlotBattery.getTitleWidget().setWidth(250);
mGraphPlotBattery.getGraphWidget()文件
.setTicksPerRangeLabel(thicksPerRange);
mGraphPlotBattery.getGraphWidget().setTicksPerDomainLabel(
粗蛋白域);
mGraphPlotBattery.setDomainLabel(“时间”);
mGraphPlotBattery.setRangeLabel(textTitle);
mGraphPlotBattery.SetRangeBounders(0,BoundaryMode.FIXED,maxValue,
边界模式(固定);
setGraphLayoutDimensions();
}
专用空白卷轴(浮动盘){
double calculatedMinX=getCalculatedMinX().doubleValue();
double calculatedMaxX=getCalculatedMaxX().doubleValue();
最终双域span=calculatedMaxX-calculatedMinX;
最后一个双步骤=domainSpan/getWidth();
最终双偏移=平移*步长;
newMinX=计算的minx+偏移量;
newMaxX=计算的Maxx+偏移量;
Log.d(“测试”,“滚动x”+newMinX+“缩放y”+newMaxX”);
}
专用空心缩放(浮动比例){
if(Float.isInfinite(scale)| | Float.isNaN(scale)
||(比例>-0.001和<0.001){
返回;
}
Log.d(“测试”,“缩放x”+newMinX+“缩放y”+newMaxX”);
double calculatedMinX=getCalculatedMinX().doubleValue();
double calculatedMaxX=getCalculatedMaxX().doubleValue();
最终双域span=calculatedMaxX-calculatedMinX;
最终双域中点=calculatedMaxX-域跨度/2.0f;
最终双偏移=域跨度*比例/2.0f;
newMinX=域中点-偏移量;
newMaxX=域中点+偏移量;
}
我可以缩放/滑动布局中的第一个或第二个图形,效果很好

但我的问题是,我需要滑动/缩放listView中的第一项,即温度图,我希望滑动/缩放也会发生在第二项,即电压图中

这里的想法是,x轴的值是相同的(它是时间轴),所以缩放/滑动应该发生在两个图形上。
有人能帮我完成这项任务吗。

我看不到你的任何代码能够真正处理缩放/滑动…你能提供吗?现在我更新了scoll和zoom代码,但仍然缺少调用scroll()和zoom()的代码;很可能是onTouch()方法实现。