我根据一组数据画出一条曲线,现在我想让这条曲线能够随着鼠标拖动而改变位置。
由于数据量挺大的,如果没挪动一个像素点都repaint重新画,似乎不太合理,工作量太大。
大家有什么好的别的方法吗?
谢谢!!!
2 个解决方案
#1
用一个Canvas对象C1绘制全部数据组成的曲线,当按下鼠标时,新建一个Canvas对象C2,在其上绘制这组数据的外轮廓,鼠标移动时,重绘C2,使轮廓随着鼠标移动,松开鼠标时再重新绘制C1,使全部数据组成的曲线移动到鼠标的位置。这个方式有些类似Windows中拖到窗口的操作。
#2
楼主是在做报表么。
如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:
这样能保证所做修改局限于所设定的范围内。
关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。
如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。
如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:
Graphics.setClip(...);
这样能保证所做修改局限于所设定的范围内。
关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。
如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。
#1
用一个Canvas对象C1绘制全部数据组成的曲线,当按下鼠标时,新建一个Canvas对象C2,在其上绘制这组数据的外轮廓,鼠标移动时,重绘C2,使轮廓随着鼠标移动,松开鼠标时再重新绘制C1,使全部数据组成的曲线移动到鼠标的位置。这个方式有些类似Windows中拖到窗口的操作。
#2
楼主是在做报表么。
如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:
这样能保证所做修改局限于所设定的范围内。
关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。
如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。
如果楼主只是想刷新一小部分内容,我推荐使用graphics类中的clipbound功能:
Graphics.setClip(...);
这样能保证所做修改局限于所设定的范围内。
关键问题还是在于楼主你能不能缩小每次需要刷新图片的范围,如果能限定在一定范围内的话(即这个拖动不是牵一发而动全身),则可以像这样,只更新部分显示(当然你也要在算法上做优化,不要再用画所有点的方法了)。
如果这里的拖动指的是“平移”画面,那么楼上的思想是对的,即缓存当前的曲线,然后用drawimage等方法一次绘制。当然只画轮廓效率更高。。。