- 浏览: 205743 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Escalade:
果然如此,这是什么原因造成的呢??为何捕获异常后就不闪退了呢? ...
(原创)Android手动回收bitmap,引发Canvas: trying to use a recycled bitmap处理 -
honghe:
文章写得可以啊,就是自定义了一个scrollview,放到布局 ...
Android开发ScrollView上下左右滑动事件冲突整理一(根据事件) -
qfyh05:
return前需要调用super.onInterceptTou ...
Android开发ScrollView上下左右滑动事件冲突整理一(根据事件) -
Neacy_Zz:
<div class="quote_title ...
Android开发ScrollView上下左右滑动事件冲突整理一(根据事件) -
lanxin_zxy_it:
不知道谁抄谁的,在几个网站上都看到了
Android使用Shape实现布局圆角边框
主要通过重写 onInterceptTouchEvent 事件来解决,代码如下:
package com.cm.android.pad.view.itemView; import android.content.Context; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.ViewConfiguration; import android.view.WindowManager; import android.widget.ScrollView; import android.widget.Scroller; public class MultiScroll extends ScrollView { private static final int ANIMATION_SCREEN_SET_DURATION_MILLIS = 500; // What fraction (1/x) of the screen the user must swipe to indicate a page change private static final int FRACTION_OF_SCREEN_WIDTH_FOR_SWIPE = 4; private static final int INVALID_SCREEN = -1; /* * Velocity of a swipe (in density-independent pixels per second) to force a swipe to the * next/previous screen. Adjusted into mDensityAdjustedSnapVelocity on init. */ private static final int SNAP_VELOCITY_DIP_PER_SECOND = 600; // Argument to getVelocity for units to give pixels per second (1 = pixels per millisecond). private static final int VELOCITY_UNIT_PIXELS_PER_SECOND = 1000; private static final int TOUCH_STATE_REST = 0; private static final int TOUCH_STATE_HORIZONTAL_SCROLLING = 1; private static final int TOUCH_STATE_VERTICAL_SCROLLING = -1; private int mCurrentScreen; private int mDensityAdjustedSnapVelocity; private boolean mFirstLayout = true; private float mLastMotionX; private float mLastMotionY; //private OnScreenSwitchListener mOnScreenSwitchListener; private int mMaximumVelocity; private int mNextScreen = INVALID_SCREEN; private Scroller mScroller; private int mTouchSlop; private int mTouchState = TOUCH_STATE_REST; private VelocityTracker mVelocityTracker; private int mLastSeenLayoutWidth = -1; public MultiScroll(Context context) { super(context); init(); } public MultiScroll(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public MultiScroll(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { mScroller = new Scroller(getContext()); // Calculate the density-dependent snap velocity in pixels DisplayMetrics displayMetrics = new DisplayMetrics(); ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay() .getMetrics(displayMetrics); mDensityAdjustedSnapVelocity = (int) (displayMetrics.density * SNAP_VELOCITY_DIP_PER_SECOND); final ViewConfiguration configuration = ViewConfiguration.get(getContext()); mTouchSlop = configuration.getScaledTouchSlop(); mMaximumVelocity = configuration.getScaledMaximumFlingVelocity(); } @Override public boolean onInterceptTouchEvent(final MotionEvent ev) { /* * By Yoni Samlan: Modified onInterceptTouchEvent based on standard ScrollView's * onIntercept. The logic is designed to support a nested vertically scrolling view inside * this one; once a scroll registers for X-wise scrolling, handle it in this view and don't * let the children, but once a scroll registers for y-wise scrolling, let the children * handle it exclusively. */ final int action = ev.getAction(); boolean intercept = false; switch (action) { case MotionEvent.ACTION_MOVE: /* * If we're in a horizontal scroll event, take it (intercept further events). But if * we're mid-vertical-scroll, don't even try; let the children deal with it. If we * haven't found a scroll event yet, check for one. */ if (mTouchState == TOUCH_STATE_HORIZONTAL_SCROLLING) { // Let children handle the events for the duration of the scroll event. intercept = false; } else if (mTouchState == TOUCH_STATE_VERTICAL_SCROLLING) { /* * We've already started a horizontal scroll; set intercept to true so we can * take the remainder of all touch events in onTouchEvent. */ intercept = true; } else { // We haven't picked up a scroll event yet; check for one. /* * If we detected a horizontal scroll event, start stealing touch events (mark * as scrolling). Otherwise, see if we had a vertical scroll event -- if so, let * the children handle it and don't look to intercept again until the motion is * done. */ final float x = ev.getX(); final int xDiff = (int) Math.abs(x - mLastMotionX); boolean xMoved = xDiff > mTouchSlop; final float y = ev.getY(); final int yDiff = (int) Math.abs(y - mLastMotionY); boolean yMoved = yDiff > mTouchSlop; if (xMoved) { // Scroll if the user moved far enough along the X axis if(xDiff>=yDiff) mTouchState = TOUCH_STATE_HORIZONTAL_SCROLLING; mLastMotionX = x; } if (yMoved) { if(yDiff>xDiff) mTouchState = TOUCH_STATE_VERTICAL_SCROLLING; mLastMotionY = y; } } break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: // Release the drag. mTouchState = TOUCH_STATE_REST; intercept = false; break; case MotionEvent.ACTION_DOWN: /* * No motion yet, but register the coordinates so we can check for intercept at the * next MOVE event. */ //Log.i("ViewPager-->", "Action_Down"); mTouchState = TOUCH_STATE_REST; mLastMotionY = ev.getY(); mLastMotionX = ev.getX(); break; default: break; } Log.i("MultiScroll-->", intercept+""); return intercept; } }
评论
4 楼
honghe
2015-11-25
文章写得可以啊,就是自定义了一个scrollview,放到布局文件中就可以再放入scrollview了,两个scrollview都可以滑动,思路还不错的
3 楼
qfyh05
2014-06-16
return前需要调用super.onInterceptTouchEvent(ev);否则scrollview没有滚动效果。
2 楼
Neacy_Zz
2014-02-13
zhq502502 写道
垃圾。写个博客毫无思路,看到就想骂,要么你就别对外开放。艹
真的不想说你是菜呢 还是没事找事。 看不懂就直说。
1 楼
zhq502502
2013-11-11
垃圾。写个博客毫无思路,看到就想骂,要么你就别对外开放。艹
发表评论
-
[转] 把Android源代码加入SDK
2014-05-07 15:56 714原文出自:http://www.oschina.net/qu ... -
GridView分页(精确监听AbsListView滚动至底部)
2013-07-25 13:18 5840import android.view.View; imp ... -
Android图片旋转实例
2013-07-23 14:40 1032<?xml version=" ... -
Android点击WebView网页中的email发送邮件调用
2013-07-17 16:51 3036Android点击WebView网页中的email发送邮件调 ... -
(原创)Android手动回收bitmap,引发Canvas: trying to use a recycled bitmap处理
2013-07-09 13:53 27302在做Android的开发的时 ... -
Android使用Shape实现布局圆角边框
2013-06-18 13:32 26121Android使用 Shape 画边框线 1、布局 ... -
Android的TextView组件相关属性
2012-12-12 15:39 2537android:autoLink 设置是否当文本为URL ... -
java格式化文件尺寸大小
2012-10-25 17:16 1854private String formatFileSi ... -
Android开发ScrollView上下左右滑动事件冲突整理二(根据角度)
2012-10-15 17:35 7466Android的ScrollView滑动获得角度实例: ... -
读取InputStream
2012-09-12 14:41 1098读取InputSteam中的内容 public ... -
Adroid相关问题收集
2012-08-22 09:57 10801、在一个Activity中在一 ... -
Android学习笔记三
2012-08-02 15:57 966---------------------------- ... -
WebView组件中加载网页,网页中的文本框无法输入内容
2012-07-19 17:23 4956在用WebView访问网页时,发现加载的页面里的文本框无法输入 ... -
android 模拟器启动不了
2012-05-24 11:09 6124启动错误: emulator-5554 disconnecte ... -
Andriod 学习笔记二
2012-05-09 16:06 1159SQLite SQLite 数据库管理软件 SQL ... -
Andriod 学习笔记一
2012-05-09 15:33 1226屏幕分辨率: HVGA: 320 * 480 QVG ...
相关推荐
前言:今天在开发的时候遇到这样的问题,最外层是ScrollView,里面嵌套了一个横向滑动的日历控件,在滑动日历的时候很卡顿。看到这种问题,自然而然的就会想到scrollview和其他可滑动控件的冲突问题。 解决思路 用户...
Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突,是非常常见的问题,我写了一个例子和大家交流学习
通过重写ScrollView和HorizontalScrollView实现任意布局或者大图片、图表等的上下左右滑动,支持同时上下左右滑动,解决了原先滑动卡顿和同一时间只能一个方向滑动的问题~
完美解决listView嵌套scrollView的滑动冲突问题
一个简单的demo,包含了onTouch,onLongClick,onClick调用日志,顺便解决ScrollView事件冲突,详情看博文:http://blog.csdn.net/msl0903/article/details/24205973
android 解决ScrollView和listView嵌套冲突问题(保证在ScrollView中滑动listView只响应listView的滑动)
ScrollView嵌套ListView滑动冲突的解决方案
自定义的ViewPager,可以实现页面之前的相互切换,可以...同时该ViewPager解决了传统ViewPager和ListView,ScrollView滑动冲突问题,当然ListView的滑动冲突实在ScrollView中解决的。实践表明,滑动切换效果较好。
RecyclerView 嵌套 RecyclerView 滑动冲突解决----------------------- 本人亲测
亲测成功,可以直接嵌套项目中 ScrollView嵌套TabLayout+ViewPager解决滑动冲突,已进行重点标注 ViewPager会根据frament的界面高度进行展示,进行framnet的高度测量 嵌套冲突已全部解决
使用外部拦截法 、内部拦截法解决ScrollView+ListView 解决滑动冲突
1、ScrollView嵌套listView、GridView时滑动冲突,自定义 ListView、GridView; 2、自定义ScrollView,解决 当有横向的滑动操作时,与ScrollView上下滑动冲突; 2、横向ListView
ScrollView嵌套ListView滑动冲突的解决方案
本Demo主要是用于解决ListView和ScrollView嵌套冲突给ListView带来显示不正常的问题,通过动态测量ListVIew高度来解决
涉及到了ViewPager,MapView,ListView,就需要ScrollView来做一下支援,这篇文章主要介绍了浅谈Android实践之ScrollView中滑动冲突处理解决方案,有需要的可以来了解一下。
解决listview和scrollview冲突 使用linearlayout自定一个listview 用法与listview相同
自己写的解决viewpager和scrollview的冲突问题,需要的可以下载
1、解决RecyclerView与ScrollView滑动冲突2、实现RecyclerView悬停导航栏3、实现RecyclerView置顶item置顶功能