歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android在屏幕任意點移動圖片(附源碼)

Android在屏幕任意點移動圖片(附源碼)

日期:2017/3/1 11:11:35   编辑:Linux編程

以前也用過onTouchEvent(MotionEvent event)這個方法,但是沒有想到這麼用,感覺不錯,所以就自己寫了一下,感覺效果不錯,以後如果做游戲用得到,點擊屏幕在屏幕上滑動,圖片跟著滑動!效果不錯啊!哈哈,分享一下給大家,希望給大家點啟迪。

Android在屏幕任意點移動圖片源碼下載:

下載在Linux公社的1號FTP服務器裡,下載地址:

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

用戶名:www.linuxidc.com

密碼:www.muu.cc

在 2011年LinuxIDC.com\10月\10月\Android在屏幕任意點移動圖片源碼

下載方法見 http://www.linuxidc.net/thread-1187-1-1.html

程序開始界面:

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

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

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

代碼說明一切:

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

一、MainActivity.java類的代碼:

  1. package com.cn.daming;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.graphics.drawable.GradientDrawable;
  5. import android.graphics.drawable.GradientDrawable.Orientation;
  6. import android.os.Bundle;
  7. import android.util.DisplayMetrics;
  8. import android.util.Log;
  9. import android.view.MotionEvent;
  10. import android.view.View;
  11. import android.widget.AbsoluteLayout;
  12. import android.widget.Button;
  13. import android.widget.ImageView;
  14. import android.widget.Toast;
  15. public class MainActivity extends Activity {
  16. /*聲明ImageView變量*/
  17. private ImageView mImageView01;
  18. /*聲明相關變量作為存儲圖片寬高,位置使用*/
  19. private int intWidth, intHeight, intDefaultX, intDefaultY;
  20. private float mX, mY;
  21. /*聲明存儲屏幕的分辨率變量 */
  22. private int intScreenX, intScreenY;
  23. public void onCreate(Bundle savedInstanceState)
  24. {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. drawBackground();
  28. /* 取得屏幕對象 */
  29. DisplayMetrics dm = new DisplayMetrics();
  30. getWindowManager().getDefaultDisplay().getMetrics(dm);
  31. /* 取得屏幕解析像素 */
  32. intScreenX = dm.widthPixels;
  33. intScreenY = dm.heightPixels;
  34. /* 設置圖片的寬高 */
  35. intWidth = 100;
  36. intHeight = 100;
  37. /*通過findViewById構造器創建ImageView對象*/
  38. mImageView01 =(ImageView) findViewById(R.id.myImageView1);
  39. /*將圖片從Drawable賦值給ImageView來呈現*/
  40. mImageView01.setImageResource(R.drawable.body);
  41. /* 初始化按鈕位置居中 */
  42. RestoreButton();
  43. /* 當點擊ImageView,還原初始位置 */
  44. mImageView01.setOnClickListener(new Button.OnClickListener()
  45. {
  46. public void onClick(View v)
  47. {
  48. RestoreButton();
  49. }
  50. });
  51. }
  52. //加載背景顏色
  53. public void drawBackground()
  54. {
  55. GradientDrawable grad = new GradientDrawable(
  56. Orientation.TL_BR,
  57. new int[] {
  58. Color.rgb(0, 0, 127),
  59. Color.rgb(0, 0, 255),
  60. Color.rgb(127, 0, 255),
  61. Color.rgb(127, 127, 255),
  62. Color.rgb(127, 255, 255),
  63. Color.rgb(255, 255, 255)
  64. }
  65. );
  66. this.getWindow().setBackgroundDrawable(grad);
  67. }
  68. /*覆蓋觸控事件*/
  69. public boolean onTouchEvent(MotionEvent event)
  70. {
  71. /*取得手指觸控屏幕的位置*/
  72. float x = event.getX();
  73. float y = event.getY();
  74. try
  75. {
  76. /*觸控事件的處理*/
  77. switch (event.getAction())
  78. {
  79. /*點擊屏幕*/
  80. case MotionEvent.ACTION_DOWN:
  81. picMove(x, y);
  82. break;
  83. /*移動位置*/
  84. case MotionEvent.ACTION_MOVE:
  85. picMove(x, y);
  86. break;
  87. /*離開屏幕*/
  88. case MotionEvent.ACTION_UP:
  89. picMove(x, y);
  90. break;
  91. }
  92. }catch(Exception e)
  93. {
  94. e.printStackTrace();
  95. }
  96. return true;
  97. }
  98. /*移動圖片的方法*/
  99. private void picMove(float x, float y)
  100. {
  101. /*默認微調圖片與指針的相對位置*/
  102. mX=x-(intWidth/2);
  103. mY=y-(intHeight/2);
  104. /*防圖片超過屏幕的相關處理*/
  105. /*防止屏幕向右超過屏幕*/
  106. if((mX+intWidth)>intScreenX)
  107. {
  108. mX = intScreenX-intWidth;
  109. }
  110. /*防止屏幕向左超過屏幕*/
  111. else if(mX<0)
  112. {
  113. mX = 0;
  114. }
  115. /*防止屏幕向下超過屏幕*/
  116. else if ((mY+intHeight)>intScreenY)
  117. {
  118. mY=intScreenY-intHeight;
  119. }
  120. /*防止屏幕向上超過屏幕*/
  121. else if (mY<0)
  122. {
  123. mY = 0;
  124. }
  125. /*通過log 來查看圖片位置*/
  126. Log.i("jay", Float.toString(mX)+","+Float.toString(mY));
  127. /* 以setLayoutParams方法,重新安排Layout上的位置 */
  128. mImageView01.setLayoutParams
  129. (
  130. new AbsoluteLayout.LayoutParams
  131. (intWidth,intHeight,(int) mX,(int)mY)
  132. );
  133. }
  134. /* 還原ImageView位置的事件處理 */
  135. public void RestoreButton()
  136. {
  137. intDefaultX = ((intScreenX-intWidth)/2);
  138. intDefaultY = ((intScreenY-intHeight)/2);
  139. /*Toast還原位置坐標*/
  140. mMakeTextToast
  141. (
  142. "("+
  143. Integer.toString(intDefaultX)+
  144. ","+
  145. Integer.toString(intDefaultY)+")",true
  146. );
  147. /* 以setLayoutParams方法,重新安排Layout上的位置 */
  148. mImageView01.setLayoutParams
  149. (
  150. new AbsoluteLayout.LayoutParams
  151. (intWidth,intHeight,intDefaultX,intDefaultY)
  152. );
  153. }
  154. /*自定義一發出信息的方法*/
  155. public void mMakeTextToast(String str, boolean isLong)
  156. {
  157. if(isLong==true)
  158. {
  159. Toast.makeText(MainActivity.this, str, Toast.LENGTH_LONG).show();
  160. }
  161. else
  162. {
  163. Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
  164. }
  165. }
  166. }

二、在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>

Copyright © Linux教程網 All Rights Reserved