刚接触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);
}
}
}
}