在分析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);
難點一 先寫到這裏,後面會繼續更新