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

本文实例讲述了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
带有边框
listview item 边框、listview删除某个item、listview点击item事件、listview长按删除item、listview设置item间距,以便于您获取更多的相关知识。

时间: 2024-12-02 17:49:08

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

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

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

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

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

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

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

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

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

Android开发之ListView实现Item局部刷新_Android

对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView.在这种模式下,我们会在getView中,根据不同的数据源,让控件显示不同的内容.这种模式是最常见的刷新模式,当我们来回滑动ListView的时候,调用adapter的getView方法,然后listview对adapter返回的View进行绘制.这种模式下,View的显示内容或状态都记录在adapter里面

Android使用ListView批量删除item的方法_Android

本文实例讲述了Android使用ListView批量删除item的方法.分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下:   下面开始上码: (代码已更正,已解决滚动时紊乱的问题) package com.test.adapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

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

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

Android ListView分页功能实现方法_Android

通过本次小Demo我学到了: 1.ListView的小小的一个分页功能 2.加深了对自定义控件的理解 3.对ListView的优化 4.对BaseAdapter的使用 5.自定义Adapter 6.接口的回调 要实现下面的效果--当拖动ListView到底部的时候,显示一个ProgressBar和一个"正在加载..."的TextView.并且过两秒钟后,在下面加载出新的数据.项目的目录结构和程序要实现的效果如下:      首先是布局部分: 我为了实现此效果,首先在布局文件中新建了一个

android getActivity.findViewById获取ListView 返回NULL的方法_Android

在控件ID正确的情况下,检查是否在实例化布局文件之后,获取LISTVIEW, 先inflate找layout下布局文件,并实例化后才能获得Listview的ID demo: public class FragmentPage extends Fragment { View view = null; @Override @SuppressLint("HandlerLeak") public View onCreateView(LayoutInflater inflater, ViewGr