标签:控件 right 滚动 自定义 难点 rectF android textview left
在分析Magic源码的时候,深受启发,发现了很多有用的点,要一步一步的剖析才能理解的更深,这里就在title的下滑线的基础上进行详细分析,
基础点一 要实现一个可以滚动的textview,并且不能遮挡
我们定义一个LinearLayout,然后在LinearLayou中添加自定义的TextView,这时我们会发现,它并不能滚动,只是显示为了一行,代码和效果如下,在这里是循环了10次,添加了10个textview,并且要求textview是单行的和缩略的。
for(int i=0;i<10;i++){
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT
);
TextView textView =new TextView(this);
textView.setText("文字测试"+i);
lp.weight=i;
textView.setLayoutParams(lp);
textView.setSingleLine();
textView.setEllipsize(TextUtils.TruncateAt.END);
ll_title.addView(textView);
}
在手机上显示的效果如下,可以看得到这个textview并不是滚动的,而是铺满屏幕的。
这时候我们只用在布局上使用HorizontalScrollView,包裹住我们的LinearLayout即可实现LinearLayout的滚动,这是一个非常简单的基础点。效果如下图,可以看到明显的下划线,是可以滚动的,并且文字的也可以显示完整了。
基础点二 绘制一条可以滑动的线
2.1 首先我们要在屏幕绘制一条粗线条,这个可以在onDraw方法中实现,我们定义一个RectF,定义他的上下左右四个边距,然后再定义画笔和就可以实现了,代码如下
private void init(){
paint.setColor(Color.BLUE);
rectF.left=30;
rectF.right=60;
rectF.top=90;
rectF.bottom=120;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRoundRect(rectF,8,8,paint);
}
2.2 实现线的水平滑动,这主要是利用重绘的原理实现的,我们需要不断的修改线的left和right的值,来实现滚动
,这其实是一个难点,这里只是提一下,后面会当做难点来讲解,因为这里涉及到了偏移量的问题,还是回调效果。这两个难点,是需要计算。
rectF.left=rectF.left+(50)*mStartInterpolator.getInterpolation(v);
rectF.right= rectF.right+50*mEndInterpolator.getInterpolation(v);
难点一 先写到这里,后面会继续更新
标签:控件,right,滚动,自定义,难点,rectF,android,textview,left 来源: https://blog.csdn.net/zhjin8510/article/details/95090270
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。