全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android view随触碰滑动效果

主要思路是通过父布局的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小时内与您取得联系。