Android在屏幕任意点移动图片【大明进化二十四】

今天看书,看到了这个效果,以前也用过onTouchEvent(MotionEvent event)这个方法,但是没有想到这么用,感觉不错,所以就自己写了一下,感觉效果不错,以后如果做游戏用得到,点击屏幕在屏幕上滑动,图片跟着滑动!效果不错啊!哈哈,分享一下给大家,希望给大家点启迪,有问题的留言,想要源码的留言,欢迎大家留言讨论!转载请标明出处:

http://blog.****.net/wdaming1986/article/details/6788097

程序开始界面: 点击屏幕左上角,图片移动过去

Android在屏幕任意点移动图片【大明进化二十四】Android在屏幕任意点移动图片【大明进化二十四】

点击屏幕左下角,图片移动过去 点击屏幕右下角,图片移动过去

Android在屏幕任意点移动图片【大明进化二十四】Android在屏幕任意点移动图片【大明进化二十四】

代码说明一切:

在TouchDemo工程下,com.cn.daming的包下面:

一、MainActivity.java类的代码:

package com.cn.daming; import android.app.Activity; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable.Orientation; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.AbsoluteLayout; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { /*声明ImageView变量*/ private ImageView mImageView01; /*声明相关变量作为存储图片宽高,位置使用*/ private int intWidth, intHeight, intDefaultX, intDefaultY; private float mX, mY; /*声明存储屏幕的分辨率变量 */ private int intScreenX, intScreenY; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); drawBackground(); /* 取得屏幕对象 */ DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); /* 取得屏幕解析像素 */ intScreenX = dm.widthPixels; intScreenY = dm.heightPixels; /* 设置图片的宽高 */ intWidth = 100; intHeight = 100; /*通过findViewById构造器创建ImageView对象*/ mImageView01 =(ImageView) findViewById(R.id.myImageView1); /*将图片从Drawable赋值给ImageView来呈现*/ mImageView01.setImageResource(R.drawable.body); /* 初始化按钮位置居中 */ RestoreButton(); /* 当点击ImageView,还原初始位置 */ mImageView01.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { RestoreButton(); } }); } //加载背景颜色 public void drawBackground() { GradientDrawable grad = new GradientDrawable( Orientation.TL_BR, new int[] { Color.rgb(0, 0, 127), Color.rgb(0, 0, 255), Color.rgb(127, 0, 255), Color.rgb(127, 127, 255), Color.rgb(127, 255, 255), Color.rgb(255, 255, 255) } ); this.getWindow().setBackgroundDrawable(grad); } /*覆盖触控事件*/ public boolean onTouchEvent(MotionEvent event) { /*取得手指触控屏幕的位置*/ float x = event.getX(); float y = event.getY(); try { /*触控事件的处理*/ switch (event.getAction()) { /*点击屏幕*/ case MotionEvent.ACTION_DOWN: picMove(x, y); break; /*移动位置*/ case MotionEvent.ACTION_MOVE: picMove(x, y); break; /*离开屏幕*/ case MotionEvent.ACTION_UP: picMove(x, y); break; } }catch(Exception e) { e.printStackTrace(); } return true; } /*移动图片的方法*/ private void picMove(float x, float y) { /*默认微调图片与指针的相对位置*/ mX=x-(intWidth/2); mY=y-(intHeight/2); /*防图片超过屏幕的相关处理*/ /*防止屏幕向右超过屏幕*/ if((mX+intWidth)>intScreenX) { mX = intScreenX-intWidth; } /*防止屏幕向左超过屏幕*/ else if(mX<0) { mX = 0; } /*防止屏幕向下超过屏幕*/ else if ((mY+intHeight)>intScreenY) { mY=intScreenY-intHeight; } /*防止屏幕向上超过屏幕*/ else if (mY<0) { mY = 0; } /*通过log 来查看图片位置*/ Log.i("jay", Float.toString(mX)+","+Float.toString(mY)); /* 以setLayoutParams方法,重新安排Layout上的位置 */ mImageView01.setLayoutParams ( new AbsoluteLayout.LayoutParams (intWidth,intHeight,(int) mX,(int)mY) ); } /* 还原ImageView位置的事件处理 */ public void RestoreButton() { intDefaultX = ((intScreenX-intWidth)/2); intDefaultY = ((intScreenY-intHeight)/2); /*Toast还原位置坐标*/ mMakeTextToast ( "("+ Integer.toString(intDefaultX)+ ","+ Integer.toString(intDefaultY)+")",true ); /* 以setLayoutParams方法,重新安排Layout上的位置 */ mImageView01.setLayoutParams ( new AbsoluteLayout.LayoutParams (intWidth,intHeight,intDefaultX,intDefaultY) ); } /*自定义一发出信息的方法*/ public void mMakeTextToast(String str, boolean isLong) { if(isLong==true) { Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show(); } else { Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); } } }

二、在main.xml布局文件中的代码:

<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget27" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <TextView android:id="@+id/myTextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_x="80dip" android:text="@string/hello" /> <ImageView android:id="@+id/myImageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" > </ImageView> </AbsoluteLayout>