Autore Topic: Utilizzo "onTouchEvent" per live wallpaper  (Letto 794 volte)

Offline danspe

  • Nuovo arrivato
  • *
  • Post: 3
  • Respect: 0
    • Mostra profilo
Utilizzo "onTouchEvent" per live wallpaper
« il: 17 Ottobre 2012, 15:56:11 CEST »
0
Salve a tutti, sono nuovo e ho ritenuto postare su questo forum in quanto, dopo una attenta ricerca, ho ritenuto più valido e professionale rispetto ad altri. Ho provato ha eseguire una ricerca all'interno del forum ma non ho trovato una risposta valida al mio caso: Sto provando a esercitarmi su un semplice live wallpaper ma mi sono "incastrato" in un problema. In poche parole dopo aver caricato una immagine non riesco in nessun modo a muoverla tramite "onTouchEvent (MotionEvent event)". Dov'è che sbaglio? Grazie di cuore in anticipo.  :-)


Codice (Java): [Seleziona]
package com.wallpapertest;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.service.wallpaper.WallpaperService;
import android.view.MotionEvent;
import android.view.SurfaceHolder;

public class SfondoService extends WallpaperService {

        private final Handler mHandler = new Handler();

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
       
        @Override
        public Engine onCreateEngine() {
                return new WallpaperEngine();
               
        }
       
        class WallpaperEngine extends Engine{
                public Bitmap Image;
                float y1;
                float x1;

               
        private final Runnable mWallaper = new Runnable() {
            public void run() {
                render();
            }
        };

                public WallpaperEngine (){
                        this.x1 = 10;
                        this.y1 = 10;
                        Image = BitmapFactory.decodeResource(getResources(), R.drawable.immagine);
                }
               
        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);
        }
       
       
        @Override
        public void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacks(mWallaper);
        }
               
                @Override
                public void onVisibilityChanged(boolean visible) {
                        if(visible){
                                render();                              
                        }              
                }              

               
                @Override
                public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {        
                        super.onSurfaceChanged(holder, format, width, height); 

                        render();
                }
               
                @Override
                public void onSurfaceCreated(SurfaceHolder holder) {                   
                        super.onSurfaceCreated(holder);
                }
               
                @Override
                public void onSurfaceDestroyed(SurfaceHolder holder) {                 
                        super.onSurfaceDestroyed(holder);
                        mHandler.removeCallbacks(mWallaper);
                }
               
            @Override
            public void onOffsetsChanged(float xOffset, float yOffset, float xStep,
                                                                        float yStep, int xPixels, int yPixels) {                   
                 render();
            }
           
               
                @Override
                public void onTouchEvent (MotionEvent event){
                       
                    this.x1 = event.getX() - Image.getWidth() / 2;
                    this.y1 = event.getY() - Image.getHeight() / 2;
                     
                        super.onTouchEvent(event);
                }


               
                private void onDraw(Canvas canvas){
                        canvas.drawBitmap(Image, x1, y1, null);
                }
       
               
                public void render (){
                        SurfaceHolder surfaceHolder = getSurfaceHolder();
                       
                        Canvas canvas = null;
                        try{
                                canvas = surfaceHolder.lockCanvas();
                                if (canvas != null) {
                                        onDraw(canvas);
                                       
                                }
                        }finally{
                                if(canvas != null){
                                        surfaceHolder.unlockCanvasAndPost(canvas);
                                }
                        }
                }

        }
}