android listview边框颜色,Android实现带有边框的ListView和item的方法

本文实例讲述了Android实现带有边框的ListView和item的方法。分享给大家供大家参考,具体如下:

想为ListView和item四周添加边框有两种方法:

1.贴一张带有边框效果的背景图

2.自定义Draw的方法

第一种方法较第二种方法更耗系统资源,但是用法简单,只需要一张图设置为相应控件的背景即可,而第二种灵活性好些。

这次是实现带有边框的ListView和item,为此写个简单Demo 学习学习

先看下Demo运行效果吧

下面是主要代码,主要是用到Canvas.drawLine(...)代码简单,我就不??铝?/p>

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 list;

private Context c;

MyBaseAdaper(Context c, List 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程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值