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中实现在手机屏幕上拖动View(如拖动图片)
- Android实现ImageView图片缩放和拖动
- Android DragImageView实现下拉拖动图片放大效果
- android中使用ViewPager实现图片左右拖动
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- android webview加载html图片自适应手机屏幕大小&点击查看大图
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- android webview加载html图片自适应手机屏幕大小&点击查看大图
- Android ImageView图片代码实现按屏幕宽度等比例缩放
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- Android开发之ImageView通过matrix实现两点缩放和图片拖动
- 利用webView实现加载网络图片居中并适应手机屏幕,以及img设置前缀
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- 使用viewGrop自定义轮播图中实现图片自适应手机屏幕的宽度
- android webview加载html图片自适应手机屏幕大小&点击查看大图
- Android自定义控件:imageview重写onMeasure方法实现图片按指定比例显示,拉伸永不变形,解决屏幕适配问题
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码
- KenBurnsView:实现Ken Burns effect图片展示效果的效果android控件
- Android 使用ViewPager实现左右循环滑动图片