Android layout 如何动态更新一个图形在另一个图形中的缩放/滑动(此处使用listview在同一屏幕中显示两个图形)
我使用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
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()方法实现。