ScrollView如何嵌套ScrollView
来源:互联网 发布:机器人软件开发平台 编辑:程序博客网 时间:2024/05/29 17:00
android开发中ScrollView嵌套ScrollView是android最常用的功能,众所周知,android 里两个相同方向的ScrollView是不能嵌套的,那要是有这样的需求怎么办?
目前做的这个只支持两个ScrollView嵌套,两个以上还有待改进,能套两个就已经能满足很多需求了,呵呵,另外现在只做了纵向scrollview的支持,横向的还没做
package com.example.easy.view;
/**
* Created by admin on 2016/5/10.
*/
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ScrollView;
public class InnerScrollView extends ScrollView {
/** */public ScrollView parentScrollView;public InnerScrollView(Context context, AttributeSet attrs) { super(context, attrs);}private int lastScrollDelta = 0;public void resume() { overScrollBy(0, -lastScrollDelta, 0, getScrollY(), 0, getScrollRange(), 0, 0, true); lastScrollDelta = 0;}int mTop = 10;/** * 将targetView滚到最顶端 */public void scrollTo(View targetView) { int oldScrollY = getScrollY(); int top = targetView.getTop() - mTop; int delatY = top - oldScrollY; lastScrollDelta = delatY; overScrollBy(0, delatY, 0, getScrollY(), 0, getScrollRange(), 0, 0, true);}private int getScrollRange() { int scrollRange = 0; if (getChildCount() > 0) { View child = getChildAt(0); scrollRange = Math.max(0, child.getHeight() - (getHeight())); } return scrollRange;}int currentY;@Overridepublic boolean onInterceptTouchEvent(MotionEvent ev) { if (parentScrollView == null) { return super.onInterceptTouchEvent(ev); } else { if (ev.getAction() == MotionEvent.ACTION_DOWN) { // 将父scrollview的滚动事件拦截 currentY = (int)ev.getY(); setParentScrollAble(false); return super.onInterceptTouchEvent(ev); } else if (ev.getAction() == MotionEvent.ACTION_UP) { // 把滚动事件恢复给父Scrollview setParentScrollAble(true); } else if (ev.getAction() == MotionEvent.ACTION_MOVE) { } } return super.onInterceptTouchEvent(ev);}@Overridepublic boolean onTouchEvent(MotionEvent ev) { View child = getChildAt(0); if (parentScrollView != null) { if (ev.getAction() == MotionEvent.ACTION_MOVE) { int height = child.getMeasuredHeight(); height = height - getMeasuredHeight(); // System.out.println("height=" + height); int scrollY = getScrollY(); // System.out.println("scrollY" + scrollY); int y = (int)ev.getY(); // 手指向下滑动 if (currentY < y) { if (scrollY <= 0) { // 如果向下滑动到头,就把滚动交给父Scrollview setParentScrollAble(true); return false; } else { setParentScrollAble(false); } } else if (currentY > y) { if (scrollY >= height) { // 如果向上滑动到头,就把滚动交给父Scrollview setParentScrollAble(true); return false; } else { setParentScrollAble(false); } } currentY = y; } } return super.onTouchEvent(ev);}/** * 是否把滚动事件交给父scrollview * * @param flag */private void setParentScrollAble(boolean flag) { parentScrollView.requestDisallowInterceptTouchEvent(!flag);}
}
dit
0 0
- ScrollView如何嵌套ScrollView
- ScrollView嵌套ScrollView
- ScrollView嵌套ScrollView
- ScrollView嵌套ScrollView
- ScrollView嵌套ScrollView
- ScrollView嵌套ScrollView
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- 如何在ScrollView中嵌套ListView、ScrollView、EditText、GridView
- ScrollView嵌套Scrollview滑动冲突
- Android ScrollView 嵌套 ScrollView 滑动
- 如何在ScrollView中嵌套ListView
- 如何在ScrollView中嵌套ListView
- Android: 如何在ScrollView中嵌套ListView
- 如何在ScrollView中嵌套ListView
- 如何在ScrollView中嵌套ListView
- Android:如何在ScrollView中嵌套ListView
- 如何在ScrollView中嵌套ListView
- 如何在ScrollView中嵌套ListView
- 数据解析第三方类报错的解决办法
- 百度地图API接口 地图标注 地址经纬度解析
- 在centos上安装nfsen及插件
- 从四个方面帮你做好移动页面性能优化
- FMDB增删改查的使用
- ScrollView如何嵌套ScrollView
- 【AKOJ】1021-最后的胜利者
- 【JAVA 动态创建风水罗盘 超精华Swing项目方案-项目源码 - 文章05】
- 常用排序算法的C语言实现
- L3-3. 社交集群 PAT团体设计天梯赛
- C++类构造函数与汇编、this
- 内存管理(16.5.10)
- Session总结
- 用美图秀秀批量修改图像尺寸分辨率大小、批量修改名字