Android 사용자 정의 동적 벽지 개발 상세 설명
동적 벽지 원리
Surface View 를 사용 해 본 적 이 있다 면 동적 벽 지 를 개발 하 는 것 은 당신 에 게 매우 간단 합 니 다.
동적 벽지 의 본질은 바로 하나의 서비스 가 동적 벽지 엔진 엔진 을 유지 하고 있 기 때문에 우리 가 본 동적 효 과 는 사실 이 엔진 을 통 해 그 려 진 것 이다.이 엔진 을 지 키 는 서 비 스 는 WallpaperService 다.이 글 은 내부 실현 원 리 를 논의 하지 않 고 동적 벽 지 를 어떻게 실현 하 는 지 알려 주기 때문에 자세히 말 하지 않 는 다.
2.동적 벽지 실현
크게 세 단계 로 나 눌 수 있다.
사용자 정의 WallpaperService 계승 WallpaperService 만 들 기
1.사용자 정의 배경 화면 서비스 만 들 기
public class MyLwp extends WallpaperService {
@Override
public Engine onCreateEngine() {
return new MyEngine();
}
class MyEngine extends Engine{
@Override
public SurfaceHolder getSurfaceHolder() {
return super.getSurfaceHolder();
}
@Override
public void onCreate(SurfaceHolder surfaceHolder) {
super.onCreate(surfaceHolder);
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
}
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
}
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
}
}
}
2.Manifest 등록
<service
android:name=".MyLwp"
android:enabled="true"
android:permission="android.permission.BIND_WALLPAPER">
<intent-filter>
<action android:name="android.service.wallpaper.WallpaperService" />
</intent-filter>
<meta-data
android:name="android.service.wallpaper"
android:resource="@xml/livewallpapervideo" />
</service>
반드시 추가 해 야 할 몇 가지 부분:permission,intent-filter,meta-data.3.필요 한 xml 파일 만 들 기
이 xml 파일 은 Manifest 에서 meta-data 의 resource 에 필요 한 파일 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<wallpaper xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/app_name"
android:settingsActivity="ASD"
android:thumbnail="@mipmap/ic_launcher"/>
두 번 째 속성 을 주의해 야 합 니 다:settingsActivity,이 속성 은 설정 할 수도 있 고 설정 하지 않 아 도 됩 니 다.그 는 동적 벽 지 를 설정 하 는 인터페이스 를 시작 합 니 다.일반적인 상황 에서 이 인터페이스 가 실 용적 이지 않 습 니 다.우 리 는 보통 Preference Activity 를 사용 하여 이 루어 집 니 다.다음은 이 속성 을 추가 하 는 것 과 이 속성 을 추가 하지 않 는 것 의 차이 점 입 니 다.이것 을 완성 한 후에 바로 우리 가 동적 벽 지 를 설계 할 때 이다.사용자 정의 Wallpaper 클래스 로 돌아 가기:
우 리 는 클래스 에서 내부 클래스 인 MyEngine 이 Engine 에서 계승 하 는 것 을 사용자 정의 했다.이 Engine 은 바로 그 리 는 데 쓰 인 다.Engine 에 관 한 몇 가지 주요 방법 은 다음 과 같다.
class MyEngine extends Engine{
// SurfaceHolder
@Override
public SurfaceHolder getSurfaceHolder() {
return super.getSurfaceHolder();
}
//
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset);
}
//Surface
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
}
//Surface
@Override
public void onSurfaceDestroyed(SurfaceHolder holder) {
super.onSurfaceDestroyed(holder);
}
}
onOffsets Changed 는 주의해 야 합 니 다.어떤 핸드폰 이 데스크 톱 을 미 끄 러 뜨 릴 때 배경 그림 이 좌우 로 이동 하 는 것 을 기억 하 십 니까?이 방법 은 이 효 과 를 실현 할 수 있 습 니 다.제스처 가 미 끄 러 지 는 모든 프레임 에서 순서대로 바 뀝 니 다.다음은 개인 이 이해 하 는 매개 변수의 의미 입 니 다.x Offset:x 방향 으로 미 끄 러 지 는 백분율(데스크 톱 페이지 수 와 관련)
yOffset:y 방향 슬라이딩 백분율(일반적으로 사용 되 지 않 음)
xOffsetStep:x 방향 각 페이지 가 차지 하 는 백분율(1/xOffsetStep=데스크 톱 의 페이지 수)
yOffset Step:동일
xPixelOffset:x 픽 셀 오프셋 내 려 놓 기
y。。。。。
4.그립 니 다.
그 리 는 방식 은 Surface View 의 그리 기 와 같 습 니 다.
@Override
public void onSurfaceCreated(SurfaceHolder holder) {
super.onSurfaceCreated(holder);
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.RED);
holder.unlockCanvasAndPost(canvas);
}
나 는 단지 간단하게 빨간색 배경 을 말 했 을 뿐이다.효 과 는 다음 과 같다.물론 다양한 효 과 를 실현 할 수 있 는데 이것 은 서로 다른 수요 에 따라 이 루어 진다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.