1.首先要明白,什么时候回TextView处理滑动,什么时候不处理滑动

1.1往上滑动,到达文本底部就不要再处理了,如果往上滑动不在底部则继续TextView滑动

1.2往下滑动,到达文本顶部就不要再处理了,如果往下滑动不在顶部则继续TextView滑动

关键计算地方:

      1.当前是上滑动还是下滑动(相对于屏幕) ,使用ev.getRawY()获得当前滑动位置在屏幕哪个地方

      2.  计算文本客滑动到哪里即可停止, (行高*总文本行数)- (行高 * 最多显示行数)   int sum = getLineHeight() * getLineCount() - getLineHeight() * getMaxLines();

废话不说了,上代码,欢迎参考使用,转载请说明出处,原创不易且行且珍惜,谢谢支持

import android.content.Context;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import android.view.MotionEvent; import com.suxuantech.erpsys.utils.L; /**
* ......................我佛慈悲....................
* ......................_oo0oo_.....................
* .....................o8888888o....................
* .....................88" . "88....................
* .....................(| -_- |)....................
* .....................0\ = /0....................
* ...................___/`---'\___..................
* ..................' \\| |// '.................
* ................./ \\||| : |||// \..............
* .............../ _||||| -卍-|||||- \..............
* ..............| | \\\ - /// | |.............
* ..............| \_| ''\---/'' |_/ |.............
* ..............\ .-\__ '-' ___/-. /.............
* ............___'. .' /--.--\ `. .'___...........
* .........."" '< `.___\_<|>_/___.' >' ""..........
* ........| | : `- \`.;`\ _ /`;.`/ - ` : | |.......
* ........\ \ `_. \_ __\ /__ _/ .-` / /.......
* ....=====`-.____`.___ \_____/___.-`___.-'=====....
* ......................`=---='.....................
* ..................佛祖开光 ,永无BUG................
*
* @author Created by 李站旗 on 2018/3/3 0003 15:25 .
* QQ:1032992210
* E-mail:lizhanqihd@163.com
* @Description: 可滑动的TextView, 并且解决了与 ScrollView等的滑动冲突
*/
public class ScrollTextView extends android.support.v7.widget.AppCompatTextView {
public ScrollTextView(Context context) {
super(context);
setMovementMethod(ScrollingMovementMethod.getInstance());
} public ScrollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setMovementMethod(ScrollingMovementMethod.getInstance());
} public ScrollTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setMovementMethod(ScrollingMovementMethod.getInstance());
}
float lastScrollY = ;
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (getLineCount() > getMaxLines()) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
lastScrollY = ev.getRawY();
L.d("lldd","down:"+lastScrollY);
} else if (ev.getAction() == MotionEvent.ACTION_MOVE) {
//滑动到头并且还在继续上滑动,或者滑动到底部就不要再拦截了(有误差)
int sum = getLineHeight() * getLineCount() - getLineHeight() * getMaxLines();
//计算上次与本次差
float diff = lastScrollY - ev.getRawY();
if (diff>){//下滑动并且到达了底部也不要处理了
//底部这里用abs的原因是,因为计算sum的时候有些误差
if (Math.abs(sum - getScrollY())<) {
getParent().requestDisallowInterceptTouchEvent(false);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
}else if (diff<){//上滑动
if (getScrollY() == ) {//上滑动并且已经到达了顶部就不要在处理了
getParent().requestDisallowInterceptTouchEvent(false);
} else {
getParent().requestDisallowInterceptTouchEvent(true);
}
}
lastScrollY = ev.getRawY();
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
}
return super.onTouchEvent(ev);
}
}

解决TextView多行滑动与NestedScrollView等,滑动冲突,我的解决方案的更多相关文章

  1. android获取textview的行数

    最近项目需求,需要获取Textview的行数,通过行数与TextView的maxLines进行比较来确定是否显示TextView下方的展开按钮是否显示,废话少说直接上代码,mTextView.getL ...

  2. Android 获取View的高度或TextView的行数, 实现自适应的textview

    大家都遇到过项目中需要获控件的的高度或者列如文章开头说TextView的行数 但是很多人在实际操作中getLineCount()获取到值是零,其实只是我们没在正确的位置获取. 这是因为activtiy ...

  3. TextView 获取行数,某一行的内容,某行的宽度

    获取行数 ViewTreeObserver vto = textView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlob ...

  4. 解决TextView drawableRight左侧图片大小不可控的问题

    通过代码来修改图片的大小: Drawable rightDrawable= context.getResources().getDrawable(R.drawable.more); rightDraw ...

  5. jquery 连写注释;siblings() 方法;jQuery 的3种滑动方法;slideUp()向上滑动;slideDown()向下滑动;slideToggle()来回滑动

    首先我们看两个连写注释 第一个:   /* 点击头像,显示基本资料 */ $(".f-chatTit a.avatar").click(function(){ $(this).hi ...

  6. 解决jqplot与jquery-ui导入必要包时的冲突

    解决jqplot与jquery-ui导入必要包时的冲突 对于一个网页中,即要有jqplot的画图,又要有jquery-ui的风格显示! 但在导入必要的包时,出现了问题! 先导入jqplot的必要包: ...

  7. 解决Android中TextView首行缩进的问题

    方式一:(推荐) setText("\u3000\u3000"+xxxxx); 方式二:这种方式不同分辨率会有问题 setText(""+xxxxx); 半角: ...

  8. 解决TextView在显示文字的时候,一行还没显示满就跳到下一行

    转载请注明:转自 http://blog.csdn.NET/u011176685/article/details/48295185 一.问题描述: Android的TextView在显示文字的时候,如 ...

  9. Picasso解决 TextView加载html图片异步显示

    项目中有这样一个需求: textview加载一段 html标签 其中包含 "<Img url= " 图片异步展示 而且 根据图片的比例 宽度满屏展示. 思路: 重写textv ...

随机推荐

  1. 三节点搭建openstack-Mitaka版本

    前言: 现在的云计算平台已经非常火,也非常的稳定了.像阿里云平台,百度云平台等等,今天咱们基于openstack来搭建一个云平台 注意: 本次平台搭建为三节点搭建(没有外部存储节点,所有存储为本地存储 ...

  2. BZOJ5466 NOIP2018保卫王国(倍增+树形dp)

    暴力dp非常显然,设f[i][0/1]表示i号点不选/选时i子树内的答案,则f[i][0]=Σf[son][1],f[i][1]=a[i]+Σmin(f[son][0],f[son][1]). 注意到 ...

  3. hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)

    Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

  4. BZOJ3675 [Apio2014]序列分割 【斜率优化dp】

    3675: [Apio2014]序列分割 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 3366  Solved: 1355 [Submit][St ...

  5. HDOJ.1070 Milk(贪心)

    Milk 点我挑战题目 题意分析 每组测试数据给出一系列牛奶商品,分别是牛奶的品牌,价格,以及体积.在读取数据的时候,体积在200以下的牛奶直接忽略掉.并且每天要喝200ML的牛奶.但是无论牛奶体积有 ...

  6. android脱壳之DexExtractor原理分析[zhuan]

    http://www.cnblogs.com/jiaoxiake/p/6818786.html内容如下 导语: 上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的 ...

  7. 【计数】【UVA11401】 Triangle Counting

    传送门 Description 把1……n这n个数中任取3个数,求能组成一个三角形的方案个数 Input 多组数据,对于每组数据,包括: 一行一个数i,代表前i个数. 输入结束标识为i<3. O ...

  8. java 解析http返回xml数据

    //post 请求 private static String sendPost(String url, String urlParameters) throws Exception { URL ob ...

  9. UVALive - 5713 最小生成树

    题意: 秦始皇修路,已知n个城市的坐标以及该城市的人口数,修路的费用是两个城市之间的欧几里得距离,其中可以有一条路不用花费代价但是要求这条路连接的两个城市的人口之和A/B尽量大,其中B是修路的总费用. ...

  10. Python to list users in AWS

    code import boto3 c1=boto3.client('iam') #list_users will be a dict users=c1.list_users() #transfer ...