Android 사용자 정의 동적 벽지 개발 상세 설명

5201 단어 Android동적 벽지
어떤 휴대 전화의 멋 진 동적 벽 지 를 보고 그들 이 어떻게 실현 되 었 는 지 궁금 한 적 이 있 습 니까?사실 우리 자신 도 실현 할 수 있 습 니 다.
동적 벽지 원리
Surface View 를 사용 해 본 적 이 있다 면 동적 벽 지 를 개발 하 는 것 은 당신 에 게 매우 간단 합 니 다.
동적 벽지 의 본질은 바로 하나의 서비스 가 동적 벽지 엔진 엔진 을 유지 하고 있 기 때문에 우리 가 본 동적 효 과 는 사실 이 엔진 을 통 해 그 려 진 것 이다.이 엔진 을 지 키 는 서 비 스 는 WallpaperService 다.이 글 은 내부 실현 원 리 를 논의 하지 않 고 동적 벽 지 를 어떻게 실현 하 는 지 알려 주기 때문에 자세히 말 하지 않 는 다.
2.동적 벽지 실현
크게 세 단계 로 나 눌 수 있다.
사용자 정의 WallpaperService 계승 WallpaperService 만 들 기
  • Manifest 에 이 서 비 스 를 등록 하고 관련 속성 을 추가 합 니 다
  • 필요 한 xml 파일 만 들 기
    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);
        }
    나 는 단지 간단하게 빨간색 배경 을 말 했 을 뿐이다.효 과 는 다음 과 같다.

    물론 다양한 효 과 를 실현 할 수 있 는데 이것 은 서로 다른 수요 에 따라 이 루어 진다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기