EX07_04.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:4k
源码类别:

android开发

开发平台:

Java

  1. package irdc.EX07_04;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. /**/
  5. import android.util.DisplayMetrics;
  6. import android.util.Log;
  7. import android.view.MotionEvent;
  8. import android.view.View;
  9. import android.widget.AbsoluteLayout;
  10. import android.widget.Button;
  11. import android.widget.ImageView;
  12. import android.widget.Toast;
  13. public class EX07_04 extends Activity
  14. {
  15.   /*声明ImageView变量*/
  16.   private ImageView mImageView01;
  17.   /*声明相关变量作为存储图片宽高,位置使用*/
  18.   private int intWidth, intHeight, intDefaultX, intDefaultY;
  19.   private float mX, mY; 
  20.   /*声明存储屏幕的分辨率变量 */
  21.   private int intScreenX, intScreenY;
  22.   /** Called when the activity is first created. */
  23.   @Override
  24.   public void onCreate(Bundle savedInstanceState)
  25.   {
  26.     super.onCreate(savedInstanceState); 
  27.     setContentView(R.layout.main);
  28.     
  29.     /* 取得屏幕对象 */
  30.     DisplayMetrics dm = new DisplayMetrics(); 
  31.     getWindowManager().getDefaultDisplay().getMetrics(dm);
  32.     
  33.     /* 取得屏幕解析像素 */
  34.     intScreenX = dm.widthPixels;
  35.     intScreenY = dm.heightPixels;
  36.     
  37.     /* 设置图片的宽高 */
  38.     intWidth = 100;
  39.     intHeight = 100;
  40.     /*通过findViewById构造器创建ImageView对象*/ 
  41.     mImageView01 =(ImageView) findViewById(R.id.myImageView1);
  42.     /*将图片从Drawable赋值给ImageView来呈现*/
  43.     mImageView01.setImageResource(R.drawable.baby);
  44.     
  45.     /* 初始化按钮位置居中 */
  46.     RestoreButton();
  47.     
  48.     /* 当点击ImageView,还原初始位置 */
  49.     mImageView01.setOnClickListener(new Button.OnClickListener()
  50.     {
  51.       @Override
  52.       public void onClick(View v)
  53.       {
  54.         RestoreButton();
  55.       }
  56.     });
  57.   }
  58.   
  59.   /*覆盖触控事件*/
  60.   @Override
  61.   public boolean onTouchEvent(MotionEvent event) 
  62.   {
  63.     /*取得手指触控屏幕的位置*/
  64.     float x = event.getX();
  65.     float y = event.getY();
  66.     
  67.     try
  68.     {
  69.       /*触控事件的处理*/
  70.       switch (event.getAction()) 
  71.       {
  72.         /*点击屏幕*/
  73.         case MotionEvent.ACTION_DOWN:
  74.           picMove(x, y);
  75.             break;
  76.         /*移动位置*/
  77.         case MotionEvent.ACTION_MOVE:
  78.           picMove(x, y);
  79.             break;
  80.         /*离开屏幕*/
  81.         case MotionEvent.ACTION_UP:
  82.           picMove(x, y);  
  83.             break;
  84.       }
  85.     }catch(Exception e)
  86.       {
  87.         e.printStackTrace();
  88.       }
  89.     return true;
  90.   }
  91.   /*移动图片的方法*/
  92.   private void picMove(float x, float y)
  93.   {
  94.     /*默认微调图片与指针的相对位置*/
  95.     mX=x-(intWidth/2);
  96.     mY=y-(intHeight/2);
  97.     
  98.     /*防图片超过屏幕的相关处理*/
  99.     /*防止屏幕向右超过屏幕*/
  100.     if((mX+intWidth)>intScreenX)
  101.     {
  102.       mX = intScreenX-intWidth;
  103.     }
  104.     /*防止屏幕向左超过屏幕*/
  105.     else if(mX<0)
  106.     {
  107.       mX = 0;
  108.     }
  109.     /*防止屏幕向下超过屏幕*/
  110.     else if ((mY+intHeight)>intScreenY)
  111.     {
  112.       mY=intScreenY-intHeight;
  113.     }
  114.     /*防止屏幕向上超过屏幕*/
  115.     else if (mY<0)
  116.     {
  117.       mY = 0;
  118.     }
  119.     /*通过log 来查看图片位置*/
  120.     Log.i("jay", Float.toString(mX)+","+Float.toString(mY));
  121.     /* 以setLayoutParams方法,重新安排Layout上的位置 */
  122.     mImageView01.setLayoutParams
  123.     (
  124.       new AbsoluteLayout.LayoutParams
  125.       (intWidth,intHeight,(int) mX,(int)mY)
  126.     );
  127.   }
  128.   
  129.   /* 还原ImageView位置的事件处理 */
  130.   public void RestoreButton()
  131.   {
  132.     intDefaultX = ((intScreenX-intWidth)/2);
  133.     intDefaultY = ((intScreenY-intHeight)/2);
  134.     /*Toast还原位置坐标*/
  135.     mMakeTextToast
  136.     (
  137.       "("+
  138.       Integer.toString(intDefaultX)+
  139.       ","+
  140.       Integer.toString(intDefaultY)+")",true
  141.     );
  142.     
  143.     /* 以setLayoutParams方法,重新安排Layout上的位置 */
  144.     mImageView01.setLayoutParams
  145.     (
  146.       new AbsoluteLayout.LayoutParams
  147.       (intWidth,intHeight,intDefaultX,intDefaultY)
  148.     );
  149.   }
  150.   /*自定义一发出信息的方法*/
  151.   public void mMakeTextToast(String str, boolean isLong)
  152.   {
  153.     if(isLong==true)
  154.     {
  155.       Toast.makeText(EX07_04.this, str, Toast.LENGTH_LONG).show();
  156.     }
  157.     else
  158.     {
  159.       Toast.makeText(EX07_04.this, str, Toast.LENGTH_SHORT).show();
  160.     }
  161.   }
  162. }