Android在屏幕任意点移动图片(附源码)


以前也用过onTouchEvent(MotionEvent event)这个方法,但是没有想到这么用,感觉不错,所以就自己写了一下,感觉效果不错,以后如果做游戏用得到,点击屏幕在屏幕上滑动,图片跟着滑动!效果不错啊!哈哈,分享一下给大家,希望给大家点启迪。

Android在屏幕任意点移动图片源码下载:

下载在帮客之家的1号FTP服务器里,下载地址:

FTP地址:ftp://www.bkjia.com

用户名:www.bkjia.com

密码:www.muu.cc

在 2011年LinuxIDC.com\10月\10月\Android在屏幕任意点移动图片源码

下载方法见 http://www.bkjia.net/thread-1187-1-1.html

程序开始界面:

Android在屏幕任意点移动图片

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

Android在屏幕任意点移动图片

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

Android在屏幕任意点移动图片

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

Android在屏幕任意点移动图片

代码说明一切:

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

一、MainActivity.java类的代码:

  1. package com.cn.daming;  
  2.   
  3. import android.app.Activity;  
  4. import android.graphics.Color;  
  5. import android.graphics.drawable.GradientDrawable;  
  6. import android.graphics.drawable.GradientDrawable.Orientation;  
  7. import android.os.Bundle;  
  8. import android.util.DisplayMetrics;  
  9. import android.util.Log;  
  10. import android.view.MotionEvent;  
  11. import android.view.View;  
  12. import android.widget.AbsoluteLayout;  
  13. import android.widget.Button;  
  14. import android.widget.ImageView;  
  15. import android.widget.Toast;  
  16.   
  17. public class MainActivity extends Activity {  
  18.     /*声明ImageView变量*/  
  19.       private ImageView mImageView01;  
  20.       /*声明相关变量作为存储图片宽高,位置使用*/  
  21.       private int intWidth, intHeight, intDefaultX, intDefaultY;  
  22.       private float mX, mY;   
  23.       /*声明存储屏幕的分辨率变量 */  
  24.       private int intScreenX, intScreenY;  
  25.   
  26.       public void onCreate(Bundle savedInstanceState)  
  27.       {  
  28.         super.onCreate(savedInstanceState);   
  29.         setContentView(R.layout.main);  
  30.           
  31.         drawBackground();  
  32.           
  33.         /* 取得屏幕对象 */  
  34.         DisplayMetrics dm = new DisplayMetrics();   
  35.         getWindowManager().getDefaultDisplay().getMetrics(dm);  
  36.           
  37.         /* 取得屏幕解析像素 */  
  38.         intScreenX = dm.widthPixels;  
  39.         intScreenY = dm.heightPixels;  
  40.           
  41.         /* 设置图片的宽高 */  
  42.         intWidth = 100;  
  43.         intHeight = 100;  
  44.         /*通过findViewById构造器创建ImageView对象*/   
  45.         mImageView01 =(ImageView) findViewById(R.id.myImageView1);  
  46.         /*将图片从Drawable赋值给ImageView来呈现*/  
  47.         mImageView01.setImageResource(R.drawable.body);  
  48.           
  49.         /* 初始化按钮位置居中 */  
  50.         RestoreButton();  
  51.           
  52.         /* 当点击ImageView,还原初始位置 */  
  53.         mImageView01.setOnClickListener(new Button.OnClickListener()  
  54.         {  
  55.           public void onClick(View v)  
  56.           {  
  57.             RestoreButton();  
  58.           }  
  59.         });  
  60.       }  
  61.         
  62.       //加载背景颜色   
  63.       public void drawBackground()      
  64.                {      
  65.                    GradientDrawable grad = new GradientDrawable(       
  66.                               Orientation.TL_BR,      
  67.                               new int[] {    
  68.                                              Color.rgb(00127),      
  69.                                              Color.rgb(00255),      
  70.                                              Color.rgb(1270255),      
  71.                                              Color.rgb(127127255),      
  72.                                              Color.rgb(127255255),      
  73.                                              Color.rgb(255255255)    
  74.                                          }       
  75.                    );       
  76.                    this.getWindow().setBackgroundDrawable(grad);      
  77.                }      
  78.   
  79.         
  80.       /*覆盖触控事件*/  
  81.       public boolean onTouchEvent(MotionEvent event)   
  82.       {  
  83.         /*取得手指触控屏幕的位置*/  
  84.         float x = event.getX();  
  85.         float y = event.getY();  
  86.           
  87.         try  
  88.         {  
  89.           /*触控事件的处理*/  
  90.           switch (event.getAction())   
  91.           {  
  92.             /*点击屏幕*/  
  93.             case MotionEvent.ACTION_DOWN:  
  94.               picMove(x, y);  
  95.                 break;  
  96.             /*移动位置*/  
  97.             case MotionEvent.ACTION_MOVE:  
  98.               picMove(x, y);  
  99.                 break;  
  100.             /*离开屏幕*/  
  101.             case MotionEvent.ACTION_UP:  
  102.               picMove(x, y);    
  103.                 break;  
  104.           }  
  105.         }catch(Exception e)  
  106.           {  
  107.             e.printStackTrace();  
  108.           }  
  109.         return true;  
  110.       }  
  111.       /*移动图片的方法*/  
  112.       private void picMove(float x, float y)  
  113.       {  
  114.         /*默认微调图片与指针的相对位置*/  
  115.         mX=x-(intWidth/2);  
  116.         mY=y-(intHeight/2);  
  117.           
  118.         /*防图片超过屏幕的相关处理*/  
  119.         /*防止屏幕向右超过屏幕*/  
  120.         if((mX+intWidth)>intScreenX)  
  121.         {  
  122.           mX = intScreenX-intWidth;  
  123.         }  
  124.         /*防止屏幕向左超过屏幕*/  
  125.         else if(mX<0)  
  126.         {  
  127.           mX = 0;  
  128.         }  
  129.         /*防止屏幕向下超过屏幕*/  
  130.         else if ((mY+intHeight)>intScreenY)  
  131.         {  
  132.           mY=intScreenY-intHeight;  
  133.         }  
  134.         /*防止屏幕向上超过屏幕*/  
  135.         else if (mY<0)  
  136.         {  
  137.           mY = 0;  
  138.         }  
  139.         /*通过log 来查看图片位置*/  
  140.         Log.i("jay", Float.toString(mX)+","+Float.toString(mY));  
  141.         /* 以setLayoutParams方法,重新安排Layout上的位置 */  
  142.         mImageView01.setLayoutParams  
  143.         (  
  144.           new AbsoluteLayout.LayoutParams  
  145.           (intWidth,intHeight,(int) mX,(int)mY)  
  146.         );  
  147.       }  
  148.         
  149.       /* 还原ImageView位置的事件处理 */  
  150.       public void RestoreButton()  
  151.       {  
  152.         intDefaultX = ((intScreenX-intWidth)/2);  
  153.         intDefaultY = ((intScreenY-intHeight)/2);  
  154.         /*Toast还原位置坐标*/  
  155.         mMakeTextToast  
  156.         (  
  157.           "("+  
  158.           Integer.toString(intDefaultX)+  
  159.           ","+  
  160.           Integer.toString(intDefaultY)+")",true  
  161.         );  
  162.           
  163.         /* 以setLayoutParams方法,重新安排Layout上的位置 */  
  164.         mImageView01.setLayoutParams  
  165.         (  
  166.           new AbsoluteLayout.LayoutParams  
  167.           (intWidth,intHeight,intDefaultX,intDefaultY)  
  168.         );  
  169.       }  
  170.         
  171.       /*自定义一发出信息的方法*/  
  172.       public void mMakeTextToast(String str, boolean isLong)  
  173.       {  
  174.         if(isLong==true)  
  175.         {  
  176.           Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();  
  177.         }  
  178.         else  
  179.         {  
  180.           Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();  
  181.         }  
  182.       }  
  183. }  

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

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <AbsoluteLayout  
  3.   android:id="@+id/widget27"  
  4.   android:layout_width="fill_parent"  
  5.   android:layout_height="fill_parent"  
  6.   xmlns:android="http://schemas.android.com/apk/res/android"  
  7.   >  
  8.   <TextView  
  9.     android:id="@+id/myTextView"      
  10.     android:layout_width="fill_parent"   
  11.     android:layout_height="wrap_content"   
  12.     android:layout_x="80dip"  
  13.     android:text="@string/hello"  
  14.     />  
  15.   <ImageView  
  16.     android:id="@+id/myImageView1"  
  17.     android:layout_width="wrap_content"  
  18.     android:layout_height="wrap_content"  
  19.     >  
  20.   </ImageView>  
  21. </AbsoluteLayout>  

 

 

  • 1
  • 2
  • 下一页

相关内容