本文实例讲述了Android实现带有边框的ListView和item的方法。分享给大家供大家参考,具体如下:
想为ListView和item四周添加边框有两种方法:
1.贴一张带有边框效果的背景图
2.自定义Draw的方法
第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些。
这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习
先看下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类中加一个构造函数 搞定
public BorderListView(Context context, AttributeSet attrs) { super(context, attrs); }
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android编程之activity操作技巧总结》、《Android资源操作技巧汇总》、《Android文件操作技巧汇总》、《Android操作SQLite数据库技巧总结》、《Android操作json格式数据技巧总结》、《Android数据库操作技巧总结》、《Android编程开发之SD卡操作方法汇总》、《Android开发入门与进阶教程》、《Android视图View技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
本文向大家介绍android的ListView点击item使item展开的做法的实现代码,包括了android的ListView点击item使item展开的做法的实现代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item
本文向大家介绍详解ListView中多种item的实现方式,包括了详解ListView中多种item的实现方式的使用技巧和注意事项,需要的朋友参考一下 大家都知道在实际开发时,对ListView的使用比较频繁,其表现也非常复杂。本文将通过实例介绍ListView中多种item的实现方式,下面来一起看看吧。 使用ListView一般步骤: 设置显示的ListView,设置显示的每一项item的vie
主要内容:本节引言:,1.要点讲解:,2.代码实现:,3.代码下载:,本节小结:本节引言: 本节是ListView这个小节的最后一节,给大家带来的是ListView多布局Item的实现, 何为ListView Item多布局,打个比方,QQ这种聊天列表: 假如他是用一个ListView做的,那么一个ListView上不就有两种不同的Item咯! 一左一右,嘿嘿,本节就来教大家如何实现ListView的多布局! 1.要点讲解: 重写getItemViewType()方法对应Vi
本文向大家介绍Android实现给TableLayou绘制边框的方法,包括了Android实现给TableLayou绘制边框的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现给TableLayou绘制边框的方法。分享给大家供大家参考,具体如下: 效果如下: 思路:使用share作为背景显示边框 步骤: 1.在res/drawable文件夹下建立table_frame_
我有一个带有自定义项的列表视图,比如: 灰色正方形是ImageView。填充ListView的数据来自光标形式的数据库。但图像并不直接存储在数据库中,而是在SDCard中,数据库仅保存对它们的String引用。 一开始,我将Image解码为来自覆盖CursorAdapter的bindView()回调方法的位图: 但是ListView的滚动非常缓慢。因此,我阅读了Executor框架并实现了它,用以
本文向大家介绍android中用xml文件实现带边框背景效果的方法,包括了android中用xml文件实现带边框背景效果的方法的使用技巧和注意事项,需要的朋友参考一下 前言 在项目开发的过程中,有时我们会用到带边框的纯色背景图,类似效果如下: 一般的,我们会让设计给做个背景图,然后自己用.9处理一下,这样有些麻烦,我们可以简洁点实现,就是用xml文件。 下面给出一个范例: 颜色,圆角什么的,大家可