刚接触wallpaperService,现在想做个图片动态化效果。当手指在屏幕上移动,几张图片轮流更替,并随着手指移动的方向移动,最后手指放开时,图片定位。现在我写的是一张图片的效果,但效果不是我想的那样。当我点击屏幕时,图片就出现在点击的那个地方,放手后图片消失。希望大哥们帮帮忙。
 小弟现阶段想在图片效果这一块深入点,大虾们有什么好的建议或者意见,方法之类的分享分享,感激不尽啊。
下面是我写的代码:大虾们看看问题出在哪里,哪些地方要改进的,提一下:

解决方案 »

  1.   

    public class WallPaperTest extends WallpaperService {
    private final Handler handler=new Handler(); @Override
    public Engine onCreateEngine() {
    // TODO Auto-generated method stub
    return new MyEngine();
    }
    class MyEngine extends Engine{
    private final Paint mPaint=new Paint();
    private float centerx;
    private float centery;
    private float mTouchx;
    private float mTouchy;
    private boolean mVisible;
    Bitmap bm1;
    Bitmap bm2;
    Bitmap bm3;
    Bitmap bm4;

    private final Runnable myDraw  =new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    draw();
    }
    };

    @Override
    public void onCreate(SurfaceHolder surfaceHolder) {
    // TODO Auto-generated method stub
    setTouchEventsEnabled(true);
    bm1=BitmapFactory.decodeResource(getResources(),R.drawable.file_d);
    super.onCreate(surfaceHolder);

    }

    @Override
    public void onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    if (event.getAction()==MotionEvent.ACTION_DOWN) {
     mTouchx=event.getX();
     mTouchy=event.getY();
     draw();
    } else if(event.getAction()==MotionEvent.ACTION_MOVE)  {
                  mTouchx=event.getX();
                  mTouchy=event.getY();
                  draw();
    }
    else if(event.getAction()==MotionEvent.ACTION_UP){
    undraw();
    }
    super.onTouchEvent(event);
    } @Override
    public void onVisibilityChanged(boolean visible) {
    // TODO Auto-generated method stub
    mVisible=visible;
    if (visible) {
    draw();
    }
    else {
    handler.removeCallbacks(myDraw);
    }
    }
    @Override
    public void onSurfaceChanged(SurfaceHolder holder, int format,
    int width, int height) {
    centerx=width/2.0f;
    centery=height/2.0f;
    draw();
    super.onSurfaceChanged(holder, format, width, height);
    }
    @Override
    public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    handler.removeCallbacks(myDraw);
    }
    public void undraw(){
    final SurfaceHolder holder=getSurfaceHolder();
    Canvas c=holder.lockCanvas();
    c.drawBitmap(bm1, mTouchx, mTouchy, mPaint);
    holder.unlockCanvasAndPost(c);
    if (mVisible) {
    handler.postDelayed(myDraw, 1000);
    }


    }
    public void draw(){

    final SurfaceHolder holder=getSurfaceHolder();
    Canvas c=holder.lockCanvas();

    c.drawCircle(mTouchx, mTouchy, centerx, mPaint); holder.unlockCanvasAndPost(c); handler.removeCallbacks(myDraw);
    if (mVisible) {
    handler.postDelayed(myDraw, 1000);
    }
    }
    }
      
        }
      

  2.   

    就是那个onTouchEvent()时间的处理!大虾们帮帮忙急急急!!谢谢。。
      

  3.   

    我实在懒得看你的代码。不过可以说下逻辑。需要获取坐标,并且要进行位移判定。看你的代码都没有对位移的判定,只有down和up。比如位移量大于15的时候画图片并打下标记,继续位移,大于15再画图片,up的时候选定最后一个图片,供参考