今天看书,看到了这个效果,以前也用过onTouchEvent(MotionEvent event)这个方法,但是没有想到这么用,感觉不错,所以就自己写了一下,感觉效果不错,以后如果做游戏用得到,点击屏幕在屏幕上滑动,图片跟着滑动!效果不错啊!哈哈,分享一下给大家,希望给大家点启迪,有问题的留言,想要源码的留言,欢迎大家留言讨论!转载请标明出处:
http://blog.csdn.net/wdaming1986/article/details/6788097
程序开始界面: 点击屏幕左上角,图片移动过去
点击屏幕左下角,图片移动过去 点击屏幕右下角,图片移动过去
代码说明一切:
在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>