您的位置:首页 > 移动开发 > Android开发

Android中实现在手机屏幕上拖动View(如拖动图片)(

2012-12-05 19:13 465 查看
 


准备知识点:

1、要使用到的View类的知识点:

View的宽:  View: getWidth()

View的高: View: getHight()

View左边距离屏幕左边的距离: View: getLeft();

View上边距离屏幕上边的距离: View: getTop();

View右边距离屏幕左边的距离: View: getRight();

View下边距离屏幕上边的距离: View: getBottom();

重新设置View的以上属性,可以修改View的位置,和View的大小。(在LinearLayout中也可以成功)

View: layout(int left, int top, int right, int bottom);

示例:

(1)java代码:

package com.fs.activity;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

 private TextView textView;

 private void init() {

  this.textView = (TextView) this.findViewById(R.id.textView);

 }

 @Override

 public void onCreate(Bundle savedInstanceState) {

         super.onCreate(savedInstanceState);

         setContentView(R.layout.main);

         this.init();

         this.textView.setOnClickListener(this);

     }

 

 @Override

 public void onClick(View v) {

  if(v == this.textView) {

   //得到textView左边到屏幕左边的的距离

   int left = this.textView.getLeft();

   //得到textView上边到屏幕上边的的距离

   int top = this.textView.getTop();

   //得到textView右边到屏幕左边的的距离

   int right = this.textView.getRight();

   //得到textView下边到屏幕上边的的距离

   int bottom = this.textView.getBottom();

   System.out.println(left);

   System.out.println(top);

   System.out.println(right);

   System.out.println(bottom);

   //重新设置textView的位置

   v.layout(left+10, top+10, right+10, bottom+10);

  }

 }

}

(2)main.xml布局文件
http://schemas.android.com/apk/res/android"
    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

 android:id="@+id/textView"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="你敢点我,我就变位置!"

    />

2、屏幕属性获取

使用DisplayMetrics类的对象可以获取手机屏幕的属性(屏幕像素、屏幕大小....);

DisplayMetrics类对象的获取,可以使用Activity从Context类中继承下来的函数getResource().getDisplayMetrics();得到

例如DisplayMetrics dm = getResources().getDisplayMetrics();

这后就可以通过dm相应的getXXX()函数可以得到屏幕属性

3、View类对象的OnTouchListener监听器:

该监听事件的回调函数为

public boolean onTouch(View v, MotionEvent event)

其中v是事件源,event是事件,通过event对象可以得到所有的事件信息

event的getAction()函数的返回值可以判断触摸屏幕的动作,

比如

返回值等于MotionEvent.ACTION_DOWN说明触摸了v

返回值等于MotionEvent.ACTION_MOVE说明在手指在v上滑动

返回值等于MotionEvent.ACTION_UP说明触摸后松开了

event的getRawX(),与getRawY()函数可以得到正在触摸的手指的坐标(以屏幕左上角为坐标原点)

4、有了以上知识点之后,那么就可以用手拖动View

下面来完成最开始提出的问题:

下面做一个用手按住图片就可以拖动图片,改变图片的确位置示例


(1)eclipse中工程图



(2)

布局文件main.xml的内容

  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
 <ImageView
  android:src="@drawable/icon"
  android:id="@+id/ImageView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
 />
</LinearLayout>

 

(3)MainActivity.java文件内容

 

package fs.act;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnTouchListener {
private ImageView myImageView;
private int screenWidth;
private int screenHeight;
private int lastX, lastY;
private void init() {
this.myImageView = (ImageView) this.findViewById(R.id.ImageView);
this.myImageView.setOnTouchListener(this);
DisplayMetrics dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels - 150;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.init();
}
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Toast.makeText
(MainActivity.this, "Down...", Toast.LENGTH_SHORT).show();
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
//			System.out.println("lastX:"+lastX+",lastY:"+lastY);
break;
case MotionEvent.ACTION_MOVE:
int dx = (int) event.getRawX() - lastX;
int dy = (int) event.getRawY() - lastY;

int left = v.getLeft() + dx;
int top = v.getTop() + dy;
int right = v.getRight() + dx;
int bottom = v.getBottom() + dy;

System.out.println("left:" + left);
System.out.println("top:" + top);
System.out.println("right:" + right);
System.out.println("bottom:" + bottom);

// 设置不能出界
if (left < 0) {
left = 0;
right = left + v.getWidth();
}

if (right > screenWidth) {
right = screenWidth;
left = right - v.getWidth();
}

if (top < 0) {
top = 0;
bottom = top + v.getHeight();
}

if (bottom > screenHeight) {
bottom = screenHeight;
top = bottom - v.getHeight();
}
v.layout(left, top, right, bottom);

lastX = (int) event.getRawX();
lastY = (int) event.getRawY();

break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
}
(5)运行以上例子后,就可以拖动显示的图片icon.PNG了
(6)完
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 位图 图片 拖动
相关文章推荐