当前位置: 代码迷 >> Android >> 安卓 图片移动出现异常 各位大牛能否帮小弟我看一下.谢了
  详细解决方案

安卓 图片移动出现异常 各位大牛能否帮小弟我看一下.谢了

热度:235   发布时间:2016-05-01 21:08:09.0
安卓 图片移动出现错误 各位大牛能否帮我看一下...谢了
package com.org;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import android.widget.AbsoluteLayout.LayoutParams;
import android.app.Activity;
import android.os.Bundle;

public class ImageMoveActivity extends Activity {
/** Called when the activity is first created. */
  private ImageView mImageView01;
  private int intWidth, intHeight, intDefaultX, intDefaultY;
  private float mX, mY;
  private int intScreenX, intScreenY;
  private OnClickListener listener1 = null;
@Override
  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;
   
  mImageView01 = (ImageView)findViewById(R.id.imageView1);
  mImageView01.setImageResource(R.drawable.abc_111);
   
  //初始化按钮位置居中
  RestoreButton();
   
  //当点击ImageView,还原初始位置
  mImageView01.setOnClickListener(listener1);
   
  listener1 = new OnClickListener()
  {
  public void onClick(View v)
  {
  RestoreButton();
  }
  };  
  }

//重写触控事件
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
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);
case MotionEvent.ACTION_UP:
picMove(x, y);
break;
}
}catch(Exception e)
{
e.printStackTrace();
}
return true;
}

//移动图片的方法
@SuppressWarnings("deprecation")
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);
mMakeTextToast
(
"("+Integer.toString(intDefaultX) + "," + Integer.toString(intDefaultY) + ")",true
);
//重新安排Layout上的布局
mImageView01.setLayoutParams(
new AbsoluteLayout.LayoutParams(intWidth, intHeight, intDefaultX, intDefaultY)
);
}

//自定义一条发出信息的方法
public void mMakeTextToast(String str, boolean isLong)
{
if(isLong == true)
  相关解决方案