Android實現(xiàn)帶有邊框的ListView和item的方法
本文實例講述了Android實現(xiàn)帶有邊框的ListView和item的方法。分享給大家供大家參考,具體如下:
想為ListView和item四周添加邊框有兩種方法:
1.貼一張帶有邊框效果的背景圖
2.自定義Draw的方法
第一種方法較第二種方法更耗系統(tǒng)資源,但是用法簡單,只需要一張圖設(shè)置為相應(yīng)控件的背景即可,而第二種靈活性好些。
這次是實現(xiàn)帶有邊框的ListView和item,為此寫個簡單Demo 學(xué)習(xí)學(xué)習(xí)
先看下Demo運行效果吧
下面是主要代碼,主要是用到Canvas.drawLine(...)代碼簡單,我就不啰嗦了
BorderListView.Java
package com.borderlistview.manymore13; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.widget.ListView; public class BorderListView extends ListView{ public BorderListView(Context context) { super(context); } public BorderListView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { float width = getWidth(); float height= getHeight(); int lineWidth = 10; // 線寬十個像素 int grayColor = Color.GRAY; Paint mLinePaint = new Paint(); mLinePaint.setColor(grayColor); mLinePaint.setStyle(Paint.Style.STROKE); mLinePaint.setAntiAlias(true); mLinePaint.setStrokeWidth(lineWidth); // 畫四周的邊框 注意下面的 lineWidth/2 不加的話四周的線可能不一樣粗 canvas.drawLine(0f, 0+lineWidth/2, width, 0+lineWidth/2, mLinePaint); canvas.drawLine(width-lineWidth/2, 0, width-lineWidth/2, height, mLinePaint); canvas.drawLine(width-lineWidth/2, height-lineWidth/2, 0, height-lineWidth/2, mLinePaint); canvas.drawLine(0+lineWidth/2, height, 0+lineWidth/2, 0,mLinePaint); super.onDraw(canvas); } }
ListViewItem.java ListView的item 添加虛線和紅線
package com.borderlistview.manymore13; import com.manymore13.MyListview.R; import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.view.LayoutInflater; import android.view.View; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.widget.TextView; public class ListViewItem extends RelativeLayout{ private View viewHolder; private TextView tvEventName; private Context c; private FrameLayout leftFrame; public ListViewItem(Context context) { super(context); LayoutInflater flater = LayoutInflater.from(context); viewHolder = flater.inflate(R.layout.item, this); getViewAndSetClick(); c = context; } private void getViewAndSetClick() { tvEventName = (TextView)viewHolder.findViewById(R.id.eventName); leftFrame = (FrameLayout)viewHolder.findViewById(R.id.frame); } public void setEventName(String name) { tvEventName.setText(name); } public void updateView() { this.postInvalidate(); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); Resources res = getResources(); int grayColor = Color.GRAY; int redColor = res.getColor(R.color.red); int leftFramepos = leftFrame.getRight(); Paint mLinePaint = new Paint(); mLinePaint.setColor(redColor); mLinePaint.setStyle(Paint.Style.STROKE); mLinePaint.setStrokeWidth(2); //畫兩條直線 canvas.drawLine(leftFramepos+20, 0f, leftFramepos+20, getHeight(), mLinePaint); canvas.drawLine(leftFramepos+25, 0f, leftFramepos+25, getHeight(), mLinePaint); // 畫虛線 mLinePaint.setColor(grayColor); DashPathEffect effect = new DashPathEffect(new float[] { 5,5, 5, 5, 5}, 3); mLinePaint.setAntiAlias(true); mLinePaint.setPathEffect(effect); canvas.drawLine(0, getHeight(), getWidth(), getHeight(), mLinePaint); } }
MyBaseAdaper.java
package com.borderlistview.manymore13; import java.util.List; import android.content.Context; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.ImageView; public class MyBaseAdaper extends BaseAdapter{ private List<String> list; private Context c; MyBaseAdaper(Context c, List<String> list) { this.list = list; this.c = c; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int i) { // TODO Auto-generated method stub return list.get(i); } @Override public long getItemId(int i) { // TODO Auto-generated method stub return i; } @Override public View getView(int i, View view, ViewGroup viewgroup) { ListViewItem itemView = null ; if(view == null){ itemView = new ListViewItem(c); }else{ itemView = (ListViewItem)view; } itemView.setEventName(list.get(i)); return itemView; } }
另外,在寫本次Demo的時候報了錯誤,有錯就改 Caused by: java.lang.NoSuchMethodException:BorderListView(Context,AttributeSet)
在 BorderListView類中加一個構(gòu)造函數(shù) 搞定
public BorderListView(Context context, AttributeSet attrs) { super(context, attrs); }
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android資源操作技巧匯總》、《Android文件操作技巧匯總》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進階教程》、《Android視圖View技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)文章
Android中WebView加載網(wǎng)頁設(shè)置進度條
這篇文章主要為大家詳細(xì)介紹了Android中WebView加載網(wǎng)頁設(shè)置進度條的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Android彈出DatePickerDialog并獲取值的方法
這篇文章主要為大家詳細(xì)介紹了Android彈出DatePickerDialog并獲取值的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05Android App中實現(xiàn)簡單的刮刮卡抽獎效果的實例詳解
這篇文章主要介紹了Android App中實現(xiàn)簡單的刮刮卡抽獎效果的實例詳解,文中主要借助Bitmap的canvas.drawPath的api來實現(xiàn),需要的朋友可以參考下2016-03-03Kotlin中的handler如何避免內(nèi)存泄漏詳解
Handler,我們已經(jīng)相當(dāng)熟悉了,而且經(jīng)常用得不亦樂乎,但就是因為太熟悉了,才會偶爾被它反捅一刀,血流不止,下面這篇文章主要給大家介紹了關(guān)于Kotlin中handler如何避免內(nèi)存泄漏的相關(guān)資料,需要的朋友可以參考下。2017-12-12