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. java 写入int型时会自动转换成字符

    java  写入int型时会自动转换成字符

  2. Windows7上安装Git

    我首先是百度到了这个网站:https://git-scm.com/download/win 这个网站上有下载链接,你可以根据你的系统选择不同的下载链接,我的是Win7 x64位的,下载地址为: htt ...

  3. CentOS 不间断会话(ssh关闭后如何保证程序继续运行)(nohup和screen)

    当使用ssh与远程主机的会话被关闭时,在远程主机上运行的命令也随之被中断. 就是ssh 打开以后,bash等都是他的子程序,一旦ssh关闭,系统将所有相关进程杀掉!! 导致一旦ssh关闭,执行中的任务 ...

  4. HDOJ.1051 Wooden Sticks (贪心)

    Wooden Sticks 点我挑战题目 题意分析 给出T组数据,每组数据有n对数,分别代表每个木棍的长度l和重量w.第一个木棍加工需要1min的准备准备时间,对于刚刚经加工过的木棍,如果接下来的木棍 ...

  5. SQL_MODE

    一 声明 标红部分为重点了解 原文:https://segmentfault.com/a/1190000005936172 二 SQL_MODE参数值 官方手册专门有一节介绍 https://dev. ...

  6. Java API不能远程访问linux服务器HBase的问题

    今天我在虚拟机里面安装了Hbase 1.2.4,说在windows上Java API调用访问下玩玩,结果始终连接不上. 现象是启动程序后,程序出现卡死的状态,没报错也不停止,大约半分钟后才打印一堆日志 ...

  7. Spring面试,IoC和AOP的理解(转)

    spring 的优点?1.降低了组件之间的耦合性 ,实现了软件各层之间的解耦 2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实 ...

  8. linux 下文件重命名/移动/复制命令(转)

    linux 下文件重命名/移动/复制命令(转) linux下重命名文件:使用mv命令就可以了, 例:要把名为:abc   重命名为:123 可以这样操作: 重命名:MV命令 1.进入你的文件目录,运行 ...

  9. HDU 5538 (水不水?)

    House Building Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...

  10. mybatis分页查询需要注意的问题

    一般对mybatis的分页查询的关键代码就两行: #currentPage代表当前页,pageSize代表每页的行数 PageHelper.startPage(currentPage, pageSiz ...