我正在寻求减少我的 Android 项目中的冗余代码。让我告诉你我已经拥有的东西。
我有两大主要观点。一种称为 MapView,它是一个包含可以缩放、平移等的位图的 View。另一种称为 StepInfoView,它是一个包含静态数据的 View,例如坐标数组和有关这些坐标的信息。此视图也以与 MapView相同的方式进行缩放和平移,但是,缩放因子和平移量需要独立于 MapView。
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 中的“比例”变量)。
我希望我能做的是在 RootView 中声明一个非静态比例并在 StepInfoView 中将其“转换”为静态。这完全不可能……
你能帮帮我吗?