我正在创建一个吸引canvas
的Android应用。为此,我定义了要绘制到画布上的矩形屏幕区域。由于我一直在绘制固定的屏幕区域,因此我在考虑使用Enum
(因为Enum
是为固定的屏幕区域设计的。)
这是我的enum
:
public enum LayoutEnum {
FULLSCREEN(
new ScreenArea(
new Rect(
0,
0,
MainActivity.getDevice().getWidth(),
MainActivity.getDevice().getHeight()),
Attributes.BG_PAINT)),
LOGO_AREA(
new ScreenArea (
new Rect(
(int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (FULLSCREEN.getScreenArea().getArea().width() - 0.3 * FULLSCREEN.getScreenArea().getArea().width()),
(int) (0.7 * FULLSCREEN.getScreenArea().getArea().width())),
Attributes.BG_PAINT)
);
private ScreenArea screenArea;
LayoutEnum(ScreenArea screenArea) {
this.screenArea = screenArea;
}
public ScreenArea getScreenArea() {
return screenArea;
}
}
ScreenArea
是一个简单的类,包含一个Rect
和一个Paint
,并包含一个draw
方法(以及一些getter和setter)。
我的问题是:这是一个好方法吗?
一方面,我正在处理一组固定的变量。另一方面,这些变量是可变的,我可以更改其属性(例如,使用getter和setter)。例如,我可以致电FULLSCREEN.getScreenArea().getPaint().setColor(Color.BLUE)
当您查看Enum
时,它说是
一种特殊的数据类型,它使变量成为一组 预定义常数
所以我确实有一个固定的集合,它是预定义的,但不一定是常数。
我最初的方法是定义一个名为Layout
的类,其中包含HashMap
的{{1}}。在这种情况下,我使用的是Screenarea
来将屏幕区域绘制到画布上。在这种新方法中,我使用的是Layout.get("fullscreen").draw(canvas)
。
我要切换的原因之一是引入类型安全的解决方案。当然,也可以从FULLSCREEN.getScreenArea().draw(canvas)
切换到HashMap
并将我的屏幕区域的名称存储在EnumMap
中。
希望您能为我指明正确的方向:不仅可以起作用(上面的方法已经起作用)而且可以接受并且没有气味的方向。