Android实现带有边框的ListView和item的方法

本文实例讲述了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程序设计有所帮助。

时间: 2024-10-02 11:42:40

Android实现带有边框的ListView和item的方法的相关文章

Android实现带有边框的ListView和item的方法_Android

本文实例讲述了Android实现带有边框的ListView和item的方法.分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2.自定义Draw的方法 第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些. 这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习 先看下Demo运行效果吧 下面是主要代码,主要是用到Canvas.drawLine(.

Android 中通过ViewDragHelper实现ListView的Item的侧拉划出效果

先来看看,今天要实现的自定义控件效果图: 关于ViewDragHelper的使用,大家可以先看这篇文章ViewDragHelper的使用介绍 实现该自定义控件的大体步骤如下: 1.ViewDragHelper使用的3部曲,初始化ViewDragHelper,传递触摸事件,实现ViewDragHelper.Callback抽象类. 2.需要创建2个直接的子View,分别是前景View和背景View,代表ListView每一项Item的布局的组成,如下所示: 未划出时显示的FrontView: 划出

Android简单记录和恢复ListView滚动位置的方法_Android

本文实例讲述了Android简单记录和恢复ListView滚动位置的方法.分享给大家供大家参考,具体如下: 有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码: //列表滚动 private OnScrollListener ScrollLis = new OnScrollListener() { @Override public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3)

Android简单记录和恢复ListView滚动位置的方法

本文实例讲述了Android简单记录和恢复ListView滚动位置的方法.分享给大家供大家参考,具体如下: 有时候我们需要记录当前ListView滚动到的位置,重新加载的时候要回到原位,不罗嗦,给出代码: //列表滚动 private OnScrollListener ScrollLis = new OnScrollListener() { @Override public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3)

android activity-文件浏览器的ListView的item与Checkbox 选中与否,两个事件都要处理怎么办?

问题描述 文件浏览器的ListView的item与Checkbox 选中与否,两个事件都要处理怎么办? 文件浏览器的ListView的item与Checkbox 选中与否,两个事件都要处理怎么办? 本人想做个文件浏览器,其中在ListView中要点击item进入子项,点击checkbox选中后显示删除按钮,并点击删除按钮可删除item项,其中,listview和删除按钮中一个activity中,删除按钮在checkbox一个未选中状态时是GONE状态,选中一个checkbox即显示按钮.chec

[Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题

以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3823429.html   项目中碰到一个问题,情景是这样的: 有一个ListView,每个item中有一个TextView,这个TextView实现了LongClick事件,这个TextView中又添加了ClickableSpan,实现了方法onClick. 我的需求是点击ClickableSpan,则响应ClickableSpan事件:长按ClickableSpan

ListView的Item含有CheckBox时的处理

main.xml如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" > &l

Android编程实现带有图标的ListView并带有长按菜单效果示例

本文实例讲述了Android编程实现带有图标的ListView并带有长按菜单效果.分享给大家供大家参考,具体如下: MainActivity.Java package com.zxl; import java.util.ArrayList; import java.util.List; import org.w3c.dom.ls.LSException; import android.app.Activity; import android.os.Bundle; import android.v

Android为ListView的Item设置不同的布局

  MainActivity如下: package cc.testlistview; import java.util.ArrayList; import java.util.HashMap; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import andr