Android大神请进,怎么实现手势滑屏啊!下面是我写的一段代码,为什么实现不了,求指教,谢谢!

packagecom.example.androidxuexi;importandroid.content.Context;importandroid.graphics.... package com.example.androidxuexi;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class MySurfaceView_9 extends SurfaceView implements Callback, Runnable {
private Paint paint;
private Canvas canvas;
private Bitmap bit;
private SurfaceHolder sur;
private Thread t;
private boolean flag;
private GestureDetector ges;
private int x, y;

@SuppressWarnings("deprecation")
public MySurfaceView_9(Context context) {
super(context);
sur = this.getHolder();
sur.addCallback(this);
canvas = new Canvas();
paint = new Paint();
paint.setColor(Color.YELLOW);
paint.setAntiAlias(true);
bit = BitmapFactory.decodeResource(getResources(),
R.drawable.ic_launcher);
this.setFocusable(true);
this.setLongClickable(true);
this.setFocusable(true);
this.setClickable(true);
ges = new GestureDetector(new simpleGestureListener());

}

class simpleGestureListener extends GestureDetector.SimpleOnGestureListener {
final int DISTANCE = 100, VELOCITY = 200;

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
int x2 = (int) e2.getX();
int x1 = (int) e1.getX();
int y2 = (int) e2.getY();
int y1 = (int) e1.getY();
if ((x2 - x1) > DISTANCE && Math.abs(velocityX) > VELOCITY) {
x += 5;
} else if ((x1 - x2) > DISTANCE && Math.abs(velocityX) > VELOCITY) {
x -= 5;
}else if((y2-y1)>DISTANCE && Math.abs(velocityY)>VELOCITY){
y+=5;
}else if((y1-y2)>DISTANCE && Math.abs(velocityY)>VELOCITY){
y-=5;
}

return true;
}

}

public void myDraw() {
try {
if (canvas != null) {
canvas = sur.lockCanvas();
canvas.drawColor(Color.YELLOW);
canvas.drawBitmap(bit, x, y, paint);
}
} catch (Exception e) {
} finally {
if (canvas != null) {
sur.unlockCanvasAndPost(canvas);
}
}
}

@Override
public void run() {
while (flag) {
myDraw();

}

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
flag = true;
t = new Thread(this);
t.start();
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag = false;
}

}
有没有大神!
展开
 我来答
she584713272
2015-03-25 · TA获得超过162个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:127万
展开全部
想要实现滑动效果,首先需要接收MotionEvent事件,
你要添加的是
public boolean onTouchEvent(MotionEvent event) {
if( ges.onTouchEvent(event)){
return true;
}
return false;
}
这样GestureDetector才能接收到手势。
另外根据我的经验,simpleGestureListener
中须继承
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
这样onfing可以正常work了,调试一下就可以动起来了。
另外可以考虑用ViewFlipper来实现。
追问
恩,谢谢!加那两个方法以后就实现了,膜拜!不过会出现出界的情况,我在onFling()
int screenx=this.width;
{
if(x=0){
x+=50;
}
............
}
方法中加入if语句控制之后,只可以滑一下就不能走了,不知道什么原因?
深圳市容大彩晶科技有限公司
2024-11-14 广告
广告机代理优选容大彩晶,深圳市容大彩晶科技有限公司自2007年成立伊始,一直专注于液晶商用显示产品的技术研发及产品服务。公司依托具有自主研发能力、创新高效的技术团队,打造出行业优质商用液晶显示设备。容大彩晶产品涵盖商用液晶显示、多媒体广告机... 点击进入详情页
本回答由深圳市容大彩晶科技有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式