• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 实现图片拖动,图片拖动

实现图片拖动,图片拖动

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了js实现div拖动,js实现图片拖动,jquery实现div拖动,jquery实现拖动,js实现拖动等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

实现图片拖动,图片拖动


要求:
1.通过手指移动来拖动图片  
2.控制图片不能超出屏幕显示区域

技术点:
1.MotionEvent处理
2.对View进行动态定位(layout)

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/iv_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/test"/>

</RelativeLayout>

MainActivity:

public class MainActivity extends Activity implements OnTouchListener {

	private ImageView iv_main;
	private RelativeLayout parentView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		iv_main = (ImageView) findViewById(R.id.iv_main);
		parentView = (RelativeLayout) iv_main.getParent();
		/*
		int right = parentView.getRight(); //0
		int bottom = parentView.getBottom();   //0
		Toast.makeText(this, right+"---"+bottom, 1).show();
		*/
		//设置touch监听 
		iv_main.setOnTouchListener(this);
	}
	
	private int lastX;
	private int lastY;
	private int maxRight;
	private int maxBottom;
	
	@Override
	public boolean onTouch(View v, MotionEvent event) {
		//得到事件的坐标
		int eventX = (int) event.getRawX();
		int eventY = (int) event.getRawY();
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			
			//得到父视图的right/bottom
			if(maxRight==0) {//保证只赋一次值
				maxRight = parentView.getRight();
				maxBottom = parentView.getBottom();
			}
			
			
			//第一次记录lastX/lastY
			lastX =eventX;
			lastY = eventY;
			break;
		case MotionEvent.ACTION_MOVE:
			//计算事件的偏移
			int dx = eventX-lastX;
			int dy = eventY-lastY;
			//根据事件的偏移来移动imageView
			int left = iv_main.getLeft()+dx;
			int top = iv_main.getTop()+dy;
			int right = iv_main.getRight()+dx;
			int bottom = iv_main.getBottom()+dy;
			
			//限制left  >=0
			if(left<0) {
				right += -left;
				left = 0;
			}
			//限制top
			if(top<0) {
				bottom += -top;
				top = 0;
			}
			//限制right <=maxRight
			if(right>maxRight) {
				left -= right-maxRight;
				right = maxRight;
			}
			//限制bottom <=maxBottom
			if(bottom>maxBottom) {
				top -= bottom-maxBottom;
				bottom = maxBottom;
			}
			
			iv_main.layout(left, top, right, bottom);
			//再次记录lastX/lastY
			lastX = eventX;
			lastY = eventY;
			break;

		default:
			break;
		}
		return true;//所有的motionEvent都交给imageView处理
	}
}

  

  

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 实现图片拖动,图片拖动

相关文章

  • 2017-05-26Android中使用findViewByMe提升组件查找效率,光伏组件转换效率
  • 2017-05-26应用开始界面简单倒计时的dialog,界面倒计时dialog
  • 2017-11-18Android如何http获取数据库数据
  • 2017-05-26新版mysql搭建多线程主从复制
  • 2017-05-26DB2_Tips_Tricks_04 远程数据库之间复制数据
  • 2017-05-26nginx rewrite常用示例
  • 2017-05-26Android横竖屏切换小结,Android屏切换小结
  • 2017-05-26酷欧天气(CoolWeather)应用源码,coolweather
  • 2017-05-26抽取的BaseFragment和LoadingPage,basefragment
  • 2017-05-26android:giavity和layout_gravity的区别

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • JAVA Web day01--- Android小白的第一天学习笔记,day01---android
    • EditText的setSelection属性,setselection
    • Android 算法 关于递归和二分法的小算法,android二分法
    • org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection,gradletaskinputs
    • android Unable toexecute dex: method ID not in [0, 0xffff]: 65536问题
    • Android 自定义View高级特效,神奇的贝塞尔曲线
    • Android中隐藏顶部状态栏的那些坑,android顶部状态栏
    • Android开发:控件之WebView
    • FragmentStatePagerAdapter和FragmentPagerAdapter区别,fragmentpageradapter
    • 优化1--布局的优化,优化1--布局优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有