主要思路是通过父布局的onTouch(),方法,获取滑动到的位置和点击下的位置,再去设置子view的位置。我的代码中考虑了在边缘情况。需要注意的是,使用RelativeLayout,以imageView为例。从测试结果来看,bottomMargin 和rightMargin 性能非常差,最好还是用leftMargin与topMargin定位。

下面是运行效果:
布局文件里面就是一个Relativelayout中有一个ImageView。如下
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/relativeLayout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xingyi.moveviewwithtouch.MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="40dp" android:layout_height="40dp" android:background="@android:color/black"/> </RelativeLayout>
Java代码如下,这里考虑了边缘位置滑动的效果。如果考虑,在最左边缘imageView会有一半在屏幕之外,在最右边缘会缩小,直到看不见。
package com.xingyi.moveviewwithtouch;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
ImageView imageView;
RelativeLayout relativeLayout;
int heightRL,widthRL;
int halfHeight,halfWidth;
boolean first=true;
private int widthImg;
private int heightImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
//初始化视图
private void initView() {
imageView = (ImageView) findViewById(R.id.imageView);
relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
//获取滑动瞬间位置和点击瞬间位置,并移动imageview
relativeLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_MOVE:
moveView(imageView, motionEvent.getX(), motionEvent.getY());
break;
case MotionEvent.ACTION_DOWN:
getWidthAndHeight();
moveView(imageView, motionEvent.getX(), motionEvent.getY());
break;
default:
break;
}
return true;
}
});
}
//因为不能在初始化视图时获得长宽,而每次计算一次长宽又影响性能
private void getWidthAndHeight(){
if(first){
widthRL=relativeLayout.getWidth();
heightRL=relativeLayout.getHeight();
widthImg=imageView.getWidth();
heightImg=imageView.getHeight();
halfWidth = imageView.getWidth() / 2;//imageView宽度的一半
halfHeight = imageView.getHeight() / 2;//imageView高度的一半
first=false;
}
}
//滑动瞬间,将x和y分别作imageView的中心点到relativeLayout最左和顶端距离
private void moveView(View view, float x, float y) {
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
//设置水平位置
if (x < halfWidth) {//左边缘
params.leftMargin = 0;//设置imageview到左端距离为0
} else if (x > widthRL- halfWidth) {
params.leftMargin = widthRL-widthImg;//设置imageview左端到左端端距离(params.rightMargin的性能非常糟糕)
} else {
params.leftMargin = (int) (x - halfWidth);//imageview左端到relativelayout左端距离
}
//设置竖直位置
if (y < halfHeight) {
params.topMargin = 0;
} else if (y > heightRL - halfHeight) {
params.topMargin = heightRL-widthImg;//params.bottomMargin的性能非常糟糕
} else {
params.topMargin = (int) (y - halfHeight);
}
view.setLayoutParams(params);
}
}
总结
以上所述是小编给大家介绍的Android view随触碰滑动效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# view
# 滑动
# Android 修改viewpage滑动速度的实现代码
# Android ViewPager实现左右滑动的实例
# Android模仿美团顶部的滑动菜单实例代码
# Android实现简单底部导航栏 Android仿微信滑动切换效果
# Android自定义滑动解锁控件使用详解
# Android使用ViewPager实现图片滑动预览效果
# Android 滑动监听的实例详解
# 边缘
# 左端
# 瞬间
# 小编
# 长宽
# 端到
# 的是
# 在此
# 中有
# 能在
# 给大家
# 为例
# 再去
# 端端
# 所述
# 需要注意
# 给我留言
# 点到
# 有一半
# 感谢大家
相关文章:
建站主机选哪家性价比最高?
如何通过服务器快速搭建网站?完整步骤解析
文字头像制作网站推荐软件,醒图能自动配文字吗?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何快速搭建高效WAP手机网站?
建站10G流量真的够用吗?如何应对访问高峰?
制作宣传网站的软件,小红书可以宣传网站吗?
威客平台建站流程解析:高效搭建教程与设计优化方案
建站主机选哪种环境更利于SEO优化?
如何在IIS7中新建站点?详细步骤解析
香港服务器部署网站为何提示未备案?
宝塔建站后网页无法访问如何解决?
如何在阿里云域名上完成建站全流程?
Python lxml的etree和ElementTree有什么区别
如何在自有机房高效搭建专业网站?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
微信小程序制作网站有哪些,微信小程序需要做网站吗?
公司网站设计制作厂家,怎么创建自己的一个网站?
如何注册花生壳免费域名并搭建个人网站?
建站之星好吗?新手能否轻松上手建站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
如何通过wdcp面板快速创建网站?
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何访问已购建站主机并解决登录问题?
如何确保西部建站助手FTP传输的安全性?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
如何续费美橙建站之星域名及服务?
小型网站制作HTML,*游戏网站怎么搭建?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
青岛网站建设如何选择本地服务器?
网页设计网站制作软件,microsoft office哪个可以创建网页?
如何在七牛云存储上搭建网站并设置自定义域名?
微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何配置支付宝与微信支付功能?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Swift中switch语句区间和元组模式匹配
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
广东企业建站网站优化与SEO营销核心策略指南
如何快速建站并高效导出源代码?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
如何基于云服务器快速搭建网站及云盘系统?
内部网站制作流程,如何建立公司内部网站?
济南专业网站制作公司,济南信息工程学校怎么样?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何通过智能用户系统一键生成高效建站方案?
如何高效利用200m空间完成建站?
*请认真填写需求信息,我们会在24小时内与您取得联系。