Android 可滑动ViewGroup
Posted 彼天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 可滑动ViewGroup相关的知识,希望对你有一定的参考价值。
背景是需要一个悬浮的播放器,有按键可以控制上一曲下一曲
需要解决的问题
- 可以拖动
- 和子view点击时间不存在冲突
第一点监听移动位置。第二点,dispatchTouchEvent接收到move 的时候标记,在onInterceptTouchEvent进行拦截。
效果:
video-floating
package com.example.bannerdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;
/**
* 浮动的ViewGroup
*/
public class FloatingViewGroup extends FrameLayout
//是否在拖动
boolean isDragging = false;
//按下的xy
float downX, downY;
public FloatingViewGroup(Context context)
this(context, null);
public FloatingViewGroup(Context context, AttributeSet attrs)
this(context, attrs, 0);
public FloatingViewGroup(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
init();
private void init()
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
switch (ev.getAction())
case MotionEvent.ACTION_DOWN:
downX = ev.getX();
downY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
Log.e("ssssssss", "onFling ev.getX()" + ev.getX());
isDragging = true;
float fx = ev.getX() - downX + getX();
float fY = ev.getY() - downY + getY();
if (fx + getWidth() > 1280)
fx = 1280 - getWidth();
if (fx < 0)
fx = 0;
if (fY + getHeight() > 566)
fY = 566 - getHeight();
if (fY < 0)
fY = 0;
setX(fx);
setY(fY);
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
isDragging = false;
break;
return super.dispatchTouchEvent(ev);
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
return isDragging;
以上是关于Android 可滑动ViewGroup的主要内容,如果未能解决你的问题,请参考以下文章
Android自己定义组件系列——自己定义ViewGroup实现双側滑动