Android在屏幕任意点移动图片【大明进化二十四】

                 今天看书,看到了这个效果,以前也用过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>


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
为了在Linux上搭建Qt 6的Android开发环境,你需要按照以下步骤进行操作: 1. 安装Qt 6:首先,你需要下载并安装Qt 6的开发环境。你可以从Qt官方网站下载适合你的Linux版本的Qt 6安装包,并按照指示进行安装。 2. 安装Android SDK和NDK:在Linux上开发Android应用,你需要安装Android SDK(软件开发工具包)和NDK(本地开发工具包)。你可以从Android官方网站下载SDK和NDK,并按照官方文档进行安装。 3. 配置环境变量:一旦Android SDK和NDK安装完成,你需要设置相应的环境变量。打开终端,编辑你的bashrc或者profile文件,并添加以下内容(假设你的SDK和NDK安装在/opt/android目录下): ``` export ANDROID_SDK_ROOT=/opt/android/sdk export ANDROID_NDK_ROOT=/opt/android/ndk export PATH=$PATH:$ANDROID_SDK_ROOT/tools:$ANDROID_SDK_ROOT/platform-tools:$ANDROID_NDK_ROOT ``` 保存并关闭文件,然后执行 `source ~/.bashrc` 或 `source ~/.profile` 命令以使修改生效。 4. 配置Qt Creator:打开Qt Creator,击"工具" -> "选项" -> "设备",选择"Android"选项卡。在"SDK"和"NDK"字段中,填入对应的SDK和NDK路径(例如/opt/android/sdk和/opt/android/ndk)。然后击"应用"按钮保存设置。 5. 创建Android Kit:在Qt Creator的"工具" -> "选项" -> "套件"中,击"添加"按钮创建一个新的Android Kit。选择对应的Qt版本和构建套件,然后在"设备"字段中选择你要使用的Android设备。击"应用"按钮保存设置。 完成以上步骤后,你就可以在Qt Creator中开始使用Qt 6开发Android应用了。记得在项目配置中选择之前创建的Android Kit作为目标构建套件。希望这个回答可以帮到你!如果有任何问题,请随时向我提问。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值