以前也用過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類的代碼:
- 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>