Android在屏幕任意點移動圖片

今天看書,看到了這個效果,以前也用過onTouchEvent(MotionEvent event)這個方法,但是沒有想到這麼用,感覺不錯,所以就自己寫了一下,感覺效果不錯,以後如果做遊戲用得到,點擊屏幕在屏幕上滑動,圖片跟着滑動!效果不錯啊!哈哈,分享一下給大家,希望給大家點啓迪,有問題的留言,想要源碼的留言,歡迎大家留言討論!轉載請標明出處:

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

          

                                                 程序開始界面:                                              點擊屏幕左上角,圖片移動過去

                                                         

 

                                 點擊屏幕左下角,圖片移動過去                            點擊屏幕右下角,圖片移動過去

                                                         

代碼說明一切:

在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>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章