iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android应用中利用onTouchEvent实现一个滑动布局
  • 771
分享到

怎么在Android应用中利用onTouchEvent实现一个滑动布局

androidontoucheventroi 2023-05-31 08:05:33 771人浏览 独家记忆
摘要

本篇文章给大家分享的是有关怎么在Android应用中利用onTouchEvent实现一个滑动布局,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。boolean onTouch(V

本篇文章给大家分享的是有关怎么在Android应用中利用onTouchEvent实现一个滑动布局,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

boolean onTouch(View v, MotionVent event)

触摸事件发送到视图时调用(v:视图,event:触摸事件)
返回true:事件被完全消耗(即,从down事件开始,触发move,up所有的事件)
返回fasle:事件未被完全消耗(即,只会消耗掉down事件)

boolean onTouchEvent(MotionEvent event)

触摸屏幕时调用
返回值,同上

须知

onTouch优先级比onTouchEvent高
2、如果button设置了onTouchListener监听,onTouch方法返回了true,就不会调用这个button的Click事件

运用onTouchEvent写一个能滑动的布局

需求:

刚进入界面外层布局,自动下滑一段距离,露出内层布局。
2.外层布局可以上下滑动,并且带有透明度渐变效果,改变内边距效果。

需求分析:

显然,外层布局要默认覆盖内层布局了,这个容易。自动下滑,要用到动画,ObjectAnimator
2.外层布局要实现上下滑动,那么需要自定义,对onTouchEvent重写(核心逻辑)
代码如下:

  public class MyViewGroup extends ViewGroup {   private MyViewGroupListener listener;//接口,监听滑动事件  private int vertical = 0;//布局距离顶端距离(默认0)   public MyViewGroup(Context context) {  super(context);  }   public MyViewGroup(Context context, AttributeSet attrs) {  super(context, attrs);  }   public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr);  }   @Requiresapi(api = Build.VERSION_CODES.LOLLIPOP)  public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {  super(context, attrs, defStyleAttr, defStyleRes);  }    private int downY = 0;//按下时的点  private int slide = 0;//最终移动距离  @Override  public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()){   case MotionEvent.ACTION_DOWN:   downY = (int) event.getY();   break;   case MotionEvent.ACTION_MOVE:   slide = downY - (int)event.getY();   if(slide < 0){//下滑    vertical = listener.marginTop(Math.abs(slide));   }else if(slide > 0){//上滑    vertical = listener.marginTop(-slide);   }   break;   case MotionEvent.ACTION_UP:   if(vertical < 300){    //布局距离屏幕顶部小于300,就让布局充满整个屏幕    vertical = listener.marginTop(0);   }   break;  }  return true;  }     @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  super.onMeasure(widthMeasureSpec, heightMeasureSpec);  for (int i = 0; i < getChildCount(); i++) {   View child = getChildAt(i);   //系统测量   measureChild(child, widthMeasureSpec, heightMeasureSpec);  }  }     @Override  protected void onLayout(boolean changed, int l, int t, int r, int b) {  int left = 0, top = 0, right = 0, bottom = 0;  for (int i = 0; i < getChildCount(); i++) {   View child = getChildAt(i);   right = left + child.getMeasuredWidth();   bottom = top + child.getMeasuredHeight();   child.layout(left, top, right, bottom);  }  }   public void setListener(MyViewGroupListener listener){  this.listener = listener;  }   interface MyViewGroupListener {    int marginTop(int slide);  } }
public class MainActivity extends AppCompatActivity implements MyViewGroup.MyViewGroupListener{     private MyViewGroup myViewGroup;    private ImageView iv1,iv2;    private RelativeLayout relativeLayout;    private ViewGroup.MarginLayoutParams params;    private float f;    private int p;   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  myViewGroup = (MyViewGroup) findViewById(R.id.my);  myViewGroup.setListener(this);  iv1 = (ImageView) findViewById(R.id.iv1);  iv2 = (ImageView) findViewById(R.id.iv2);  relativeLayout = (RelativeLayout) findViewById(R.id.relative);  params = (ViewGroup.MarginLayoutParams) myViewGroup.getLayoutParams();  //初始化动画(自动下滑一段儿距离),我这里写死了900  ObjectAnimator animator = ObjectAnimator.ofFloat(myViewGroup,"translationY", 900);  animator.setDuration(2000);  animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {   @Override   public void onAnimationUpdate(ValueAnimator animation) {   float y = (float)animation.getAnimatedValue();   f = y/800;   p = (int) y/3;   alpha(f);   padding(p);   }  });  animator.start(); // cloud = (ImageView) findViewById(R.id.cloud);  }      @Override  public int marginTop(int slide) {  params.topMargin += slide;  myViewGroup.setLayoutParams(params);  int vertical = (900 + params.topMargin);  if(slide == 0){   //为了隐藏两张圆图,所以把Relativelayout的高度一并减除。   params.topMargin -= (vertical+relativeLayout.getHeight());   myViewGroup.setLayoutParams(params);  }  float alpha = f + (float) params.topMargin/800;//自定义一个算法  alpha(alpha);  int padding = p + params.topMargin/3;//自定义一个算法  padding(padding);  return vertical;  }     public void alpha(float alpha) {  iv1.setAlpha(alpha);  iv2.setAlpha(alpha);  }     public void padding(int padding) {  relativeLayout.setPadding(padding, 0, padding, 0);  }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout  xmlns:android="Http://schemas.android.com/apk/res/android"  xmlns:app="http://schemas.android.com/apk/res-auto"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/activity_main"  android:layout_width="match_parent"  android:layout_height="match_parent"  tools:context="com.wgl.viewgroup1.MainActivity">  <ImageView  android:id="@+id/iv"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:src="@mipmap/pic"  android:scaleType="fitXY"/>  <!--<ImageView-->   <!--android:id="@+id/cloud"-->   <!--android:layout_width="wrap_content"-->   <!--android:layout_height="wrap_content"-->   <!--android:layout_centerHorizontal="true"-->   <!--android:alpha="0.8"-->   <!--android:src="@mipmap/cloud3"-->   <!--android:clickable="true"/>-->   <com.wgl.viewgroup1.MyViewGroup  android:id="@+id/my"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:alpha="0.8"  android:layout_alignParentTop="true">  <LinearLayout   android:layout_width="match_parent"   android:layout_height="match_parent"   android:orientation="vertical">   <RelativeLayout   android:id="@+id/relative"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:orientation="horizontal">   <com.wgl.viewgroup1.CircleImageView    android:id="@+id/iv1"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:src="@mipmap/iv1"    app:civ_border_width="2dp"    app:civ_border_color="@color/colorAccent"    android:layout_alignParentLeft="true"/>    <com.wgl.viewgroup1.CircleImageView    android:id="@+id/iv2"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:src="@mipmap/iv2"    app:civ_border_width="2dp"    app:civ_border_color="@color/colorAccent"    android:layout_alignParentRight="true"/>   </RelativeLayout>   <LinearLayout   android:layout_width="match_parent"   android:layout_height="match_parent"   android:alpha="0.8"   android:background="@color/colorPrimary">    </LinearLayout>  </LinearLayout>   </com.wgl.viewgroup1.MyViewGroup> </RelativeLayout>

以上就是怎么在Android应用中利用onTouchEvent实现一个滑动布局,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 怎么在Android应用中利用onTouchEvent实现一个滑动布局

本文链接: https://www.lsjlt.com/news/224516.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android应用中利用onTouchEvent实现一个滑动布局
    本篇文章给大家分享的是有关怎么在Android应用中利用onTouchEvent实现一个滑动布局,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。boolean onTouch(V...
    99+
    2023-05-31
    android ontouchevent roi
  • android应用中怎么利用onLayout()实现一个流式布局
    这期内容当中小编将会给大家带来有关android应用中怎么利用onLayout()实现一个流式布局,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在onLayout方法中有四个参数,我画了一个简单的图来分清...
    99+
    2023-05-31
    android roi onlayout()
  • 怎么在android应用中利用ViewPager实现一个滑动翻页效果
    这期内容当中小编将会给大家带来有关怎么在android应用中利用ViewPager实现一个滑动翻页效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现ViewPager的滑动翻页效果可以使用ViewPa...
    99+
    2023-05-31
    viewpager android age
  • 怎么在Android应用中利用ListView实现一个监听滑动事件
    怎么在Android应用中利用ListView实现一个监听滑动事件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。ListView的主要有两种滑动事件监听方法,OnTouchLi...
    99+
    2023-05-31
    listview android roi
  • 怎么在Android中利用ViewPager实现一个屏幕滑动效果
    本篇文章给大家分享的是有关怎么在Android中利用ViewPager实现一个屏幕滑动效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。创建View创建一个在之后作为fragm...
    99+
    2023-05-30
    viewpager android
  • Android应用中怎么实现一个跟踪布局效果
    这篇文章给大家介绍Android应用中怎么实现一个跟踪布局效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首页Activitypublic class TraceActivity extends AppCompatA...
    99+
    2023-05-31
    android roi
  • 怎么在Android应用中利用RecycleView 实现一个左滑上下分层功能
    怎么在Android应用中利用RecycleView 实现一个左滑上下分层功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。独立Adapter的操作方式思路: ...
    99+
    2023-05-31
    android recycleview recycle
  • 怎么在Android中利用DrawerLayout实现一个双向侧滑菜单
    这篇文章将为大家详细讲解有关怎么在Android中利用DrawerLayout实现一个双向侧滑菜单,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。布局文件的代码:<LinearLayou...
    99+
    2023-05-30
  • 怎么在Android中利用ListView实现一个侧滑删除功能
    本篇文章给大家分享的是有关怎么在Android中利用ListView实现一个侧滑删除功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。需求:listView可以侧滑item,展...
    99+
    2023-05-31
    android listview roi
  • 如何在Android中利用View实现一个垂直时间轴布局
    这篇文章将为大家详细讲解有关如何在Android中利用View实现一个垂直时间轴布局,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。时间轴,顾名思义就是将发生的事件按照时间顺序罗列起来,给用户...
    99+
    2023-05-31
    android view roi
  • 如何在Android中利用View实现一个等级滑动条功能
    这篇文章将为大家详细讲解有关如何在Android中利用View实现一个等级滑动条功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。思路: 首先绘制直线,然后等分直线绘制点; 绘制点...
    99+
    2023-05-31
    android view roi
  • 怎么在Android应用中利用RecyclerView实现一个分页滚动功能
    怎么在Android应用中利用RecyclerView实现一个分页滚动功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、需求分析最近公司项目要实现一个需求要满足以下功能...
    99+
    2023-05-31
    android recyclerview recycle
  • 怎么在Android应用中利用TextSwitcher实现一个上下滚动功能
    本篇文章为大家展示了怎么在Android应用中利用TextSwitcher实现一个上下滚动功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android 上下滚动TextSwitcher实例详解1...
    99+
    2023-05-31
    android textswitcher roi
  • 怎么在Android应用中利用CoordinatorLayout实现一个标题滚动效果
    本篇文章为大家展示了怎么在Android应用中利用CoordinatorLayout实现一个标题滚动效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在Material Design里,Coordi...
    99+
    2023-05-31
    coordinatorlayout android roi
  • Android应用中怎么实现一个滑动切换页面功能
    Android应用中怎么实现一个滑动切换页面功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 TabLayou 主要实现的是标题头的 滑动 这个 控件 类似于 Sc...
    99+
    2023-05-31
    android roi
  • Android应用中的Activity跳转怎么利用滑动来实现
    这篇文章给大家介绍Android应用中的Activity跳转怎么利用滑动来实现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。通过手势识别器实现界面的转跳,具体内容如下创建 GestureDetector对象 2、创建新...
    99+
    2023-05-31
    android activity roi
  • 如何在Android应用中实现一个侧滑功能
    本篇文章给大家分享的是有关如何在Android应用中实现一个侧滑功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。实现说明:通过自定义布局实现:SlidingLayout继承于...
    99+
    2023-05-31
    android roi
  • 怎么在android中使用View实现一个滑动删除效果
    这篇文章给大家介绍怎么在android中使用View实现一个滑动删除效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。实现功能可以向左滑动,右侧出现删除2、向左滑动如果删除出现一大半,松手打开删除,反之关闭删除3、应用...
    99+
    2023-05-31
    android view roi
  • 怎么在Android中使用SeekBar实现一个平滑滚动效果
    这篇文章将为大家详细讲解有关怎么在Android中使用SeekBar实现一个平滑滚动效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。把max改为100,progress改为50<Se...
    99+
    2023-06-14
  • Android中怎么利用Activity实现滑动返回
    这期内容当中小编将会给大家带来有关Android中怎么利用Activity实现滑动返回,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Android 滑动返回Activity的实现代码package&nbs...
    99+
    2023-05-30
    android activity
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作