배경 화면은 대부분 시스템 앱에서만 사용할 수있는 방법이있는 WallpaperManager
에 의해 관리됩니다. 서비스를 시작하고 중지하는 것은 WallpaperManager
입니다.
여러분의 제안은 아키텍처를 조금 변경하는 것입니다. 서브 클래스가 WatchFaceService
이고 하위 클래스가 Engine
일 뿐이므로 둘 중 하나만 다시 시작해야합니다. 대신, Engine
안에 시계면 서랍이 여러 개 있어야합니다. 그래서 구조는 다음과 같다 : 당신이 그려지는보고 얼굴을 변경하려는 경우
WatchFaceService
Engine
AnalogWatchFaceDrawer
DigitalWatchFaceDrawer
FancyWatchFaceDrawer
FitnessWatchFaceDrawer
WeatherWatchFaceDrawer
아니, 당신은 단지 현재의 서랍을 변경하고 즉시 다시 그리기를 강제해야한다.
편집 : 도면에 대한 는, 당신이 모든 현재 서랍에 캔버스와 경계를 통과하고 일을 할 수 있도록, 그래서 코드는 다음과 같이 표시됩니다
@Override
public void onDraw(Canvas canvas, Rect bounds) {
if (mCurrentWatchFaceDrawer != null) {
mCurrentWatchFaceDrawer.draw(canvas, bounds);
}
}
그래서 당신에게 모든 드로잉 로직을 각 서랍에 맡기고 독립적으로 작업하게하십시오.
일부 리소스를로드하는 경우 서랍에는 수명주기가 있어야합니다. 따라서 onCreate
및 onDestroy
과 같은 자체 콜백이 필요합니다. 새 서랍을 설정하면 onCreate
이라고 부르면 이미지가 나타나고 사라지면 onDestroy
으로 전화하여 이후에 정리할 수 있습니다. 이제 서랍장에 다음과 같은 인터페이스가 있어야합니다.
public interface WatchFaceDrawer {
void onCreate();
void onDestroy();
void draw(Canvas canvas, Rect bounds);
}
다른 이벤트를 처리하려면 더 많은 것을 추가해야 할 것입니다.
onDraw() 메서드는 Engine 클래스에 고유하지만 서랍은 어떻게 들어오고 엔진의 onDraw()에서 제공되는 것을 재정의합니까? 또한 onCreate() 메서드는 몇 개의 정적 이미지를로드합니다. Drawer는 호출 될 때마다 정적 이미지를로드해야합니까? 예를 들어 설명해 주시면 감사하겠습니다! – rmoh21
제발 편집을 확인하십시오. – gruszczy
감사합니다. – rmoh21