触摸和Android的拖动图像 [英] Touch and drag image in android

查看:178
本文介绍了触摸和Android的拖动图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的一些例子中,我想拖对应触摸Android上的图像。没有任何人有关于如何我能做到这一点的想法?

解决方案

 公共类TouchBall延伸活动{


@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);

    INT W = getWindowManager()getDefaultDisplay()的getWidth() -  25。
    INT H = getWindowManager()getDefaultDisplay()的getHeight() -  25。

    BallView ballView =新BallView(这一点,W,H);
    的setContentView(ballView);
}


}
公共类BallView扩展了SurfaceView实现SurfaceHolder.Callback {

    私人位图位图;
    私人MyThread线程;
    私人INT X = 20,Y = 20; INT宽度,高度;

    公共BallView(上下文的背景下,INT W,INT高){
        超(上下文);

        宽= W;
        高度= H;
        线程=新MyThread(getHolder(),这一点);
        。getHolder()的addCallback(本);
        setFocusable(真正的);
    }

    @覆盖
    保护无效的OnDraw(帆布油画){
        super.onDraw(画布);

        位= BitmapFactory.de codeResource(getResources(),R.drawable.ball_green);
        canvas.drawColor(Color.BLUE); //为了使背景
        canvas.drawBitmap(位图,x轴(bitmap.getWidth()/ 2),y轴(bitmap.getHeight()/ 2),空);


    }

    @覆盖
    公共布尔的onTouchEvent(MotionEvent事件){

        X =(int)的event.getX();
        Y =(INT)event.getY();

        如果(Xα25)
                X = 25;
         如果(X>宽)
                X =宽度;
         如果(γα25)
                Y = 25;
         如果(Y> 405)
                Y = 405;
        返回true;
    }

    @覆盖
    公共无效surfaceChanged(SurfaceHolder持有人,INT格式,诠释的宽度,高度INT){
        // TODO自动生成方法存根

    }

    @覆盖
    公共无效surfaceCreated(SurfaceHolder持有者){

        thread.startrun(真正的);
        thread.start();

    }

    @覆盖
    公共无效surfaceDestroyed(SurfaceHolder持有者){


        thread.startrun(假);
        使用Thread.stop();

    }
 }
 

主题:

 公共类MyThread继承Thread {

私人SurfaceHolder msurfaceHolder;
私人BallView mballView;
私人布尔mrun = FALSE;

公共MyThread(SurfaceHolder持有人,BallView ballView){

    msurfaceHolder =持有人;
    mballView = ballView;
}

公共无效startrun(布尔运行){

    mrun =运行;
}

@覆盖
公共无效的run(){

    super.run();
     帆布油画;
     而(mrun){
        帆布= NULL;
         尝试 {
             帆布= msurfaceHolder.lockCanvas(空);
              同步(msurfaceHolder){
               mballView.onDraw(画布);
             }
         } 最后 {
                 如果(帆布!= NULL){
                 msurfaceHolder.unlockCanvasAndPost(画布);
             }
         }
     }
  }

}
 

I am working on some example in which i want to drag the image corresponding to touch in Android. Does anybody have an idea about how I can do it?

解决方案

public class TouchBall extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int w=getWindowManager().getDefaultDisplay().getWidth()-25;
    int h=getWindowManager().getDefaultDisplay().getHeight()-25;

    BallView ballView=new BallView(this,w,h);
    setContentView(ballView);
}


}
public class BallView extends SurfaceView implements SurfaceHolder.Callback {

    private Bitmap bitmap ;
    private MyThread thread;
    private int x=20,y=20;int width,height;

    public BallView(Context context,int w,int h) {
        super(context);

        width=w;
        height=h;
        thread=new MyThread(getHolder(),this);
        getHolder().addCallback(this);
        setFocusable(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        bitmap =BitmapFactory.decodeResource(getResources(), R.drawable.ball_green);
        canvas.drawColor(Color.BLUE);//To make background 
        canvas.drawBitmap(bitmap,x-(bitmap.getWidth()/2),y-(bitmap.getHeight()/2),null);


    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        x=(int)event.getX();
        y=(int)event.getY();

        if(x<25)
                x=25;
         if(x> width)   
                x=width;
         if(y <25)
                y=25;
         if(y > 405)
                y=405;      
        return true;
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

        thread.startrun(true);
        thread.start();

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {


        thread.startrun(false);
        thread.stop();

    }   
 }

thread:

public class MyThread extends Thread {

private SurfaceHolder msurfaceHolder;
private BallView mballView;
private boolean mrun =false;

public MyThread(SurfaceHolder holder, BallView ballView) {

    msurfaceHolder = holder;
    mballView=ballView;
}

public void startrun(boolean run) {

    mrun=run;
}

@Override
public void run() {

    super.run();
     Canvas canvas;
     while (mrun) {
        canvas=null;
         try {
             canvas = msurfaceHolder.lockCanvas(null);
              synchronized (msurfaceHolder) {
               mballView.onDraw(canvas);
             }
         } finally {
                 if (canvas != null) {
                 msurfaceHolder.unlockCanvasAndPost(canvas);
             }
         }
     }
  }

}

这篇关于触摸和Android的拖动图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆