触摸和Android的拖动图像 [英] Touch and drag image in android
本文介绍了触摸和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屋!
查看全文