要求:

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处理
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# 实现拖动效果
# 拖动图片
# 自由拖动图片
# android Matrix实现图片随意放大缩小或拖动
# Android实现ImageView图片缩放和拖动
# Android编程实现图片的浏览、缩放、拖动和自动居中效果
# Android如何创建可拖动的图片控件
# Android通过自定义ImageView控件实现图片的缩放和拖动的实现代码
# Android RecyclerView多类型布局卡片解决方案
# Android实现简单卡片布局
# Android控件CardView实现卡片布局
# Android编程重写ViewGroup实现卡片布局的方法
# Android实现可拖动层叠卡片布局
# 拖动
# wrap_content
# iv_main
# src
# test
# drawable
# layout_height
# match_parent
# gt
# id
# ImageView
# MainActivity
# private
# OnTouchListener
# parentView
# protected
# Override
# public
# java
# extends
相关文章:
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何挑选优质建站一级代理提升网站排名?
开源网站制作软件,开源网站什么意思?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
jQuery 常见小例汇总
深圳网站制作的公司有哪些,dido官方网站?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
如何挑选最适合建站的高性能VPS主机?
如何通过虚拟机搭建网站?详细步骤解析
创业网站制作流程,创业网站可靠吗?
如何快速搭建高效服务器建站系统?
如何打造高效商业网站?建站目的决定转化率
制作网站怎么制作,*游戏网站怎么搭建?
建站之星代理如何获取技术支持?
如何基于PHP生成高效IDC网络公司建站源码?
如何选择靠谱的建站公司加盟品牌?
如何在七牛云存储上搭建网站并设置自定义域名?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
如何通过虚拟主机快速完成网站搭建?
,网站推广常用方法?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
学校建站服务器如何选型才能满足性能需求?
建站之星后台管理如何实现高效配置?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
如何在VPS电脑上快速搭建网站?
长沙做网站要多少钱,长沙国安网络怎么样?
免费网站制作appp,免费制作app哪个平台好?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
如何快速查询网址的建站时间与历史轨迹?
c# Task.ConfigureAwait(true) 在什么场景下是必须的
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何通过WDCP绑定主域名及创建子域名站点?
油猴 教程,油猴搜脚本为什么会网页无法显示?
建站之星与建站宝盒如何选择最佳方案?
SQL查询语句优化的实用方法总结
,怎么在广州志愿者网站注册?
制作网站外包平台,自动化接单网站有哪些?
如何通过智能用户系统一键生成高效建站方案?
建站之星展会模板:智能建站与自助搭建高效解决方案
桂林网站制作公司有哪些,桂林马拉松怎么报名?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
济南企业网站制作公司,济南社保单位网上缴费步骤?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
大同网页,大同瑞慈医院官网?
如何在建站宝盒中设置产品搜索功能?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何选择可靠的免备案建站服务器?
网站代码制作软件有哪些,如何生成自己网站的代码?
网站制作企业,网站的banner和导航栏是指什么?
*请认真填写需求信息,我们会在24小时内与您取得联系。