我正在寻求减少Android项目中的冗余代码。让我告诉你我已经拥有了什么。我有两个主要的观点组。一个叫做MapView,它是一个包含可以缩放,平移等位图的视图。另一个称为StepInfoView,它是一个包含静态数据的视图,例如坐标数组和关于这些坐标的信息。这个视图也是放大并且以与MapView相同的方式移动,但是,放大的比例因子和数量需要独立于MapView。Java继承:抽象类中的“Casting”变量为静态
StepInfoView扩展了几个不同的类(总共6个),所有这些类都需要同步(坐标绘制在一个坐标之间的线被绘制在另一个上,等等)。
所以,这里是我的代码的要点,目前:
public class MapView extends View
{
protected float scale = 1;
protected class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
@Override
public boolean onScale(ScaleGestureDetector detector)
{
scale *= detector.getScaleFactor());
return true;
}
}
}
...
public class StepInfoView extends View
{
static protected float scale = 1;
protected class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
@Override
public boolean onScale(ScaleGestureDetector detector)
{
scale *= detector.getScaleFactor());
return true;
}
}
}
...
public class StepView extends StepInfoView
{
// Custom onDraw, same scale as PathView
}
public class PathView extends StepInfoView
{
// Custom onDraw, same scale as StepView
}
正如你看到的,onScales是相同。我想创建一个抽象类来保存缩放功能,让我们称之为RootView。 MapView和StepInfoView都具有比例尺,但是我无法在RootView中进行比例缩放,因为MapView比例尺必须独立于StepInfoView。这里是我知道将工作的解决方案,但我不喜欢getter和setter的混乱:
abstract class RootView extends View
{
abstract protected float getScale();
abstract protected void setScale(float s);
protected class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener
{
@Override
public boolean onScale(ScaleGestureDetector detector)
{
setScale(getScale() * detector.getScaleFactor());
return true;
}
}
}
...
public class MapView extends RootView
{
public float scale = 1;
protected float getScale(){
return scale;
}
protected void setScale(float s){
scale = s;
}
}
public class StepInfoView extends RootView
{
public static float scale = 1;
protected float getScale(){
return scale;
}
protected void setScale(float s){
scale = s;
}
}
public class StepView extends StepInfoView
{
// Custom onDraw, same scale as PathView
}
public class PathView extends StepInfoView
{
// Custom onDraw, same scale as StepView
}
这工作正是我想要的工作,但再次,有重复相同的代码( getter和setter以及MapView和StepInfoView中的“scale”变量)。
我希望我能做的是在RootView中声明一个非静态的缩放,并在StepInfoView中将它“静态”转换为静态。这不可能...
你能帮我吗?
我需要在StepInfoView中保持静态。如果我在RootView中将其设为静态,那么StepInfoViews和MapViews将不会相互独立地进行缩放。 – androidnotgenius 2012-08-03 11:37:54
“为stepinfo scale值创建一些对象容器,并通过StepInfoView的” “对不起,但我不明白你的建议。 – androidnotgenius 2012-08-03 11:42:15