本文帶大家來實現ListView的圓弧形的分佈排列,原理很簡單,就是根據ListView的每個Item的高度來對每一個item進行偏移。
首先自定義一個LinearLayout,這是ListView的每個Item的根佈局,用來對每個item進行偏移的。
下面上代碼:
public class MatrixLinearLayout extends LinearLayout {
private int h = 0;
private float fullTrans = 40f;
public MatrixView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setParentHeight(int height) {<pre name="code" class="java"> //傳入ListView的高度
h = height;
}
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save();
int top = getTop();
float trans = calculatetrans(top,h);
Matrix m = canvas.getMatrix();
m.preTranslate(-2 / getWidth(), -2 / getHeight());
m.postTranslate(trans, 0);
canvas.concat(m);
super.dispatchDraw(canvas);
canvas.restore();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
private float calculatetrans(int top,int h){
float result = 0f;
if(top <= h/2.349f){
result = (h/2f-top)/(h/7f)*fullTrans;
}else if(top > h/2.349f){
result = (top-h/3f)/(h/7f)*fullTrans;
}
return result;
}
}
下面大家可以自己寫個demo測試一下啦,就是寫一個ListView,然後用上面自定義的MatrixLinearLayout 作爲ListView的item的根佈局,自己動手豐衣足食!