解决TextView多行滑动与NestedScrollView等,滑动冲突,我的解决方案
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等,滑动冲突,我的解决方案的更多相关文章
- android获取textview的行数
最近项目需求,需要获取Textview的行数,通过行数与TextView的maxLines进行比较来确定是否显示TextView下方的展开按钮是否显示,废话少说直接上代码,mTextView.getL ...
- Android 获取View的高度或TextView的行数, 实现自适应的textview
大家都遇到过项目中需要获控件的的高度或者列如文章开头说TextView的行数 但是很多人在实际操作中getLineCount()获取到值是零,其实只是我们没在正确的位置获取. 这是因为activtiy ...
- TextView 获取行数,某一行的内容,某行的宽度
获取行数 ViewTreeObserver vto = textView.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlob ...
- 解决TextView drawableRight左侧图片大小不可控的问题
通过代码来修改图片的大小: Drawable rightDrawable= context.getResources().getDrawable(R.drawable.more); rightDraw ...
- jquery 连写注释;siblings() 方法;jQuery 的3种滑动方法;slideUp()向上滑动;slideDown()向下滑动;slideToggle()来回滑动
首先我们看两个连写注释 第一个: /* 点击头像,显示基本资料 */ $(".f-chatTit a.avatar").click(function(){ $(this).hi ...
- 解决jqplot与jquery-ui导入必要包时的冲突
解决jqplot与jquery-ui导入必要包时的冲突 对于一个网页中,即要有jqplot的画图,又要有jquery-ui的风格显示! 但在导入必要的包时,出现了问题! 先导入jqplot的必要包: ...
- 解决Android中TextView首行缩进的问题
方式一:(推荐) setText("\u3000\u3000"+xxxxx); 方式二:这种方式不同分辨率会有问题 setText(""+xxxxx); 半角: ...
- 解决TextView在显示文字的时候,一行还没显示满就跳到下一行
转载请注明:转自 http://blog.csdn.NET/u011176685/article/details/48295185 一.问题描述: Android的TextView在显示文字的时候,如 ...
- Picasso解决 TextView加载html图片异步显示
项目中有这样一个需求: textview加载一段 html标签 其中包含 "<Img url= " 图片异步展示 而且 根据图片的比例 宽度满屏展示. 思路: 重写textv ...
随机推荐
- 转:Simple Introduction to Dirichlet Process
来源:http://hi.baidu.com/vyfrcemnsnbgxyd/item/2f10ecc3fc35597dced4f88b Dirichlet Process(DP)是一个很重要的统计模 ...
- bzoj 2140: 稳定婚姻 (二分图)
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- 【队列】【P2827】【NOIP2016D2T3】蚯蚓
传送门 Description 本题中,我们将用符号 $\lfloor c \rfloor$ 表示对 $c$ 向下取整,例如:$\lfloor 3.0 \rfloor = \lfloor 3.1 \r ...
- Ubuntu安装CUDA9.0 + cuDNN
本篇文章是基于安装CUDA 9.0的经验写,CUDA9.0目前支持Ubuntu16.04和Ubuntu17.04两个版本,如下图所示(最下面的安装方式我们选择第一个,即runfile方式): 下载链接 ...
- android xml字符串通配
1.基本使用方法 xml中定义如下字符串: <string name="buff">%1$d --- %2$s</string> 代码中解析: String ...
- c++ string写时复制
string写时复制:将字符串str1赋值给str2后,除非str1的内容已经被改变,否则str2和str1共享内存.当str1被修改之后,stl才为str2开辟内存空间,并初始化. #include ...
- HDU1394 逆序数
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- uboot主Makefile分析(t配置和编译过程详解)
1.编译uboot前需要三次make make distcleanmake x210_sd_configmake -j4 make distclean为清楚dist文件. make x210_sd_c ...
- sql获取当前时间
sql读取系统日期和时间的方法如下:--获取当前日期(如:yyyymmdd) select CONVERT (nvarchar(12),GETDATE(),112) --获取当前日期(如:yyyymm ...
- Object.defineProperty 与 属性描述符
为JavaScript对象新增或者修改属性,有两种不同方式:直接使用=赋值或者使用Object.defineProperty 定义,使用后者的话还可以设置属性的描述符. Object.definePr ...