本文实例详细描述了Android触屏测试代码,可实现对触屏的点击、移动、离开等事件的处理,对于Android初学者有很好的借鉴价值。

具体功能代码如下:

package com.test;

import android.app.Activity;

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 TouchActivity 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);

/* 取得屏幕对象 */

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.baby);

/* 初始化按钮位置居中 */

RestoreButton();

/* 当点击ImageView,还原初始位置 */

mImageView01.setOnClickListener(new Button.OnClickListener()

{

@Override

public void onClick(View v)

{

RestoreButton();

}

});

}

/*覆盖触控事件*/

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(TouchActivity.this, str, Toast.LENGTH_LONG).show();

}

else

{

Toast.makeText(TouchActivity.this, str, Toast.LENGTH_SHORT).show();

}

}

}

读者还可以在该实例的基础上完善各种事件的响应处理函数,使其功能更加丰富。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐