这个程序实现的是,拖动画面上的图片,图片会随着你的手到哪图片到哪。 
下面给出这个程序的实现代码:
public class EX07_04 extends Activity { 
  /*宣告ImageView变量*/
  private ImageView mImageView01; 
  /*宣告相关变量作为储存图片宽高,位置使用*/ 
  private int intWidth, intHeight, intDefaultX, intDefaultY; 
  private float mX, mY; 
  /*宣告储存屏幕的分辨率变量 */
  private int intScreenX, intScreenY; 
  /** Called when the activity is first created. */ 
  @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; 
    /*透过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(); 
      } 
      }); 
    } 
  /*覆写触控事件*/
  @Override 
  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(EX07_04.this, str, Toast.LENGTH_LONG).show(); 
      } else {
        Toast.makeText(EX07_04.this, str, Toast.LENGTH_SHORT).show(); 
        } 
    } 
  }
