Android ʹÓÃListViewʵÏÖÍøÒׯÀÂÛ¸Ç¥Ч¹û

來源:互聯網
上載者:User

Android ʹÓÃListViewʵÏÖÍøÒׯÀÂÛ¸Ç¥Ч¹û
Ч¹ûÈçÏ£º£¨µã»÷ÏÂÔØdemo£


ʵÏÖÔÀí£º¶¥²¿ÀûÓÃÁËListViewµÄHeadViewÀ´ÊµÏÖ£¬È»ºóÆäËûÿ¸öitem¶¼Óñ³¾°ÊµÏÖ£¡

Ê×ÏÈÉèÖÃһг£Á¿£º<†·Ÿ"http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;">package com.cyy.widget;/** * @see http://blog.csdn.net/chenlove1 * @author chenyingyou * */public class NestHelper {public static final int BACK_COLOR = 0xFFF8F3D5;// ±³¾°É«public static final int LINE_COLOR = 0xFF5A595A;// ÏßÑÕÉ«public static final int LINE_WIDTH = 2;// ÏߵĿí¶È(ҪżÊý)public static final int LINE_SPAN = 4;// Ïߵļä¾à}

ÿ¸öitemµÄ±³¾°ÊµÏÖ×îΪºËÐÄ£¬Çë¿´´úÂ룺

package com.cyy.widget;import android.content.Context;import android.graphics.Canvas;import android.graphics.ColorFilter;import android.graphics.Paint;import android.graphics.drawable.Drawable;import android.util.AttributeSet;import android.widget.FrameLayout;/** * @see http://blog.csdn.net/chenlove1 * @author chenyingyou *  */public class NestItemLayout extends FrameLayout implements NestNotifyData {public NestItemLayout(Context context) {super(context);}public NestItemLayout(Context context, AttributeSet attrs) {super(context, attrs);}public NestItemLayout(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@SuppressWarnings("deprecation")@Overridepublic void notifyDataSetChanged(int count, int position) {setBackgroundDrawable(new NestDrawable(count, position));}/** »æÖÆitem Layout±³¾° Á½±ß¸úµ×²¿ */class NestDrawable extends Drawable {private int linsCount = 0;// Á½±ß¸÷ÓжàÉÙÌõÏßprivate int span = 0;// Ò»ÌõÏߵĿí¶È£¨Ïß¼ÓÏßÖ¼ä¾à£public NestDrawable(int count, int position) {linsCount = count - position;if (linsCount > 5) {linsCount = 5;// Ò»±ß×î¶à5Ìõ}span = (NestHelper.LINE_WIDTH + NestHelper.LINE_SPAN);setPadding(span * linsCount, 0, span * linsCount,NestHelper.LINE_WIDTH);}@Overridepublic void draw(Canvas canvas) {canvas.drawColor(NestHelper.BACK_COLOR);Paint paint = new Paint();paint.setColor(NestHelper.LINE_COLOR);paint.setStrokeWidth(NestHelper.LINE_WIDTH);// »æÖƵײ¿Ïßcanvas.drawLine(span * (linsCount - 1), getHeight()- NestHelper.LINE_WIDTH / 2, getWidth() - span* (linsCount - 1), getHeight() - NestHelper.LINE_WIDTH / 2,paint);for (int i = 0; i < linsCount; i++) {// »æÖÆ×ó±ßÏßcanvas.drawLine(span * i + NestHelper.LINE_WIDTH / 2, 0, span* i + NestHelper.LINE_WIDTH / 2, getHeight(), paint);// »æÖÆÓÒ±ßÏßcanvas.drawLine(getWidth() - span * i - NestHelper.LINE_WIDTH/ 2, 0, getWidth() - span * i - NestHelper.LINE_WIDTH/ 2, getHeight(), paint);;}}@Overridepublic void setAlpha(int alpha) {}@Overridepublic void setColorFilter(ColorFilter cf) {}@Overridepublic int getOpacity() {return 0;}}}

È»ºó¶¥²¿£¬Çë¿´´úÂ룺

package com.cyy.widget;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.view.View;import android.widget.AbsListView;import android.widget.AbsListView.LayoutParams;/** * @see http://blog.csdn.net/chenlove1 * @author chenyingyou *  */public class NestHeadView extends View implements NestNotifyData {private int linsCount = 0;// ×´¿öÒª»æÖƶàÉÙÌõÏßprivate int span = 0;// Ò»ÌõÏߵĿí¶È£¨Ïß¼ÓÏßÖ¼ä¾à£public NestHeadView(Context context) {super(context);}public NestHeadView(Context context, AttributeSet attrs) {super(context, attrs);}public NestHeadView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);}@SuppressLint("DrawAllocation")@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(NestHelper.BACK_COLOR);Paint paint = new Paint();paint.setColor(NestHelper.LINE_COLOR);paint.setStrokeWidth(NestHelper.LINE_WIDTH);for (int i = 0; i < linsCount; i++) {// »æÖÆ×ó±ßÏßcanvas.drawLine(span * i + NestHelper.LINE_WIDTH / 2, span * i,span * i + NestHelper.LINE_WIDTH / 2, getHeight(), paint);// »æÖÆÓÒ±ßÏßcanvas.drawLine(getWidth() - span * i - NestHelper.LINE_WIDTH / 2,span * i,getWidth() - span * i - NestHelper.LINE_WIDTH / 2,getHeight(), paint);// »æÖƵײ¿Ïßcanvas.drawLine(span * (linsCount - 1 - i), getHeight() - span * i- NestHelper.LINE_WIDTH / 2, getWidth() - span* (linsCount - 1 - i), getHeight() - span * i- NestHelper.LINE_WIDTH / 2, paint);}}@Overridepublic void notifyDataSetChanged(int count, int position) {linsCount = count - position;if (linsCount > 5) {linsCount = 5;// Ò»±ß×î¶à5Ìõ}span = (NestHelper.LINE_WIDTH + NestHelper.LINE_SPAN);setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT,span * (linsCount - 1) + NestHelper.LINE_WIDTH));invalidate();}}
×îºóÖØÐ´ListView:

package com.cyy.widget;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;/** * @see http://blog.csdn.net/chenlove1 * @author chenyingyou *  */public class NestListView extends ListView implements NestNotifyData {private NestHeadView headView;public NestListView(Context context) {super(context);initView();}public NestListView(Context context, AttributeSet attrs) {super(context, attrs);initView();}public NestListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);initView();}private void initView() {headView = new NestHeadView(getContext());addHeaderView(headView);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}@Overridepublic void notifyDataSetChanged(int count, int position) {headView.notifyDataSetChanged(count, position);}public NestNotifyData getNotifyData() {return this;}}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.