应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

android 漂亮的listview

6167人阅读 2014/8/9 12:06 总访问:5185605 评论:0 收藏:0 手机
分类: 移动开发


效果如下:

首先在drawable下定义选择器shape_bg_listview.xml 实现圆角:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:shape="rectangle" >
  4.  
  5.     <gradient
  6.         android:angle="0"
  7.         android:endColor="#ffffff"
  8.         android:startColor="#ffffff" />
  9.  
  10.     <stroke
  11.         android:width="1px"
  12.         android:color="#cccccc" />
  13.  
  14.    <!--  <solid android:color="@android:color/white" /> -->
  15.  
  16.     <corners
  17.         android:bottomLeftRadius="15px"
  18.         android:bottomRightRadius="15px"
  19.         android:topLeftRadius="15px"
  20.         android:topRightRadius="15px" />
  21. </shape>

Layout下新建  ListView布局  seting.xml:

  1. <ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"     
  2.     android:layout_width="fill_parent"    
  3.     android:layout_height="fill_parent"    
  4.     android:scrollbars="vertical"    
  5.     android:background="#e3e2e7" 
  6.     android:fadingEdge="vertical"> 
  7. <LinearLayout 
  8.     android:layout_width="fill_parent"  
  9.     android:layout_height="wrap_content"  
  10.     android:orientation="vertical"
  11.     android:background="#e3e2e7"  
  12.      >  
  13.  
  14.   
  15.   <com.lc.settings.CornerListView  
  16.         android:id="@+id/setting_list"  
  17.         android:layout_width="fill_parent"  
  18.         android:layout_height="195dp"  
  19.         android:layout_margin="10dip"  
  20.         android:background="@drawable/shape_bg_listview"  
  21.         android:dividerHeight="1px" 
  22.         android:divider="#cccccc"
  23.         android:scrollbars="none"
  24.         android:cacheColorHint="#00000000" />
  25.   
  26.   <com.lc.settings.CornerListView  
  27.         android:id="@+id/setting_list2"  
  28.         android:layout_width="fill_parent"  
  29.         android:layout_height="78dp"  
  30.         android:layout_marginTop="30dp"
  31.         android:layout_margin="10dip"  
  32.         android:background="@drawable/shape_bg_listview"  
  33.         android:dividerHeight="1px" 
  34.         android:divider="#cccccc"
  35.         android:scrollbars="none"
  36.         android:cacheColorHint="#00000000" />
  37. </LinearLayout>  
  38.  </ScrollView>

ListView的item布局文件main_tab_setting_list_item.xml:

  1. <ScrollView  xmlns:android="http://schemas.android.com/apk/res/android"     
  2.     android:layout_width="fill_parent"    
  3.     android:layout_height="fill_parent"    
  4.     android:scrollbars="vertical"    
  5.     android:background="#e3e2e7" 
  6.     android:fadingEdge="vertical"> 
  7. <LinearLayout 
  8.     android:layout_width="fill_parent"  
  9.     android:layout_height="wrap_content"  
  10.     android:orientation="vertical"
  11.     android:background="#e3e2e7"  
  12.      >  
  13.  
  14.   
  15.   <com.lc.settings.CornerListView  
  16.         android:id="@+id/setting_list"  
  17.         android:layout_width="fill_parent"  
  18.         android:layout_height="195dp"  
  19.         android:layout_margin="10dip"  
  20.         android:background="@drawable/shape_bg_listview"  
  21.         android:dividerHeight="1px" 
  22.         android:divider="#cccccc"
  23.         android:scrollbars="none"
  24.         android:cacheColorHint="#00000000" />
  25.   
  26.   <com.lc.settings.CornerListView  
  27.         android:id="@+id/setting_list2"  
  28.         android:layout_width="fill_parent"  
  29.         android:layout_height="78dp"  
  30.         android:layout_marginTop="30dp"
  31.         android:layout_margin="10dip"  
  32.         android:background="@drawable/shape_bg_listview"  
  33.         android:dividerHeight="1px" 
  34.         android:divider="#cccccc"
  35.         android:scrollbars="none"
  36.         android:cacheColorHint="#00000000" />
  37. </LinearLayout>  
  38.  </ScrollView>

Settings.java:

  1. public class Settings extends Fragment{
  2.         
  3. @Override
  4. public void onActivityCreated(Bundle savedInstanceState) {
  5. // TODO Auto-generated method stub
  6.         SetingOne();
  7.         SetingTwo();
  8. super.onActivityCreated(savedInstanceState);
  9. }
  10. private void SetingOne()
  11. {
  12. CornerListView cornerListView = (CornerListView) getActivity().findViewById(R.id.setting_list);
  13. ArrayList<ListItem> mList = setListDataOne();  
  14.         // 获取MainListAdapter对象  
  15.         MainListViewAdapter adapter = new MainListViewAdapter(getActivity().getApplicationContext(),mList);  
  16.         
  17.         // 将MainListAdapter对象传递给ListView视图  
  18.         cornerListView.setAdapter(adapter);  
  19. }
  20. private void SetingTwo()
  21. {
  22. CornerListView cornerListView2 = (CornerListView) getActivity().findViewById(R.id.setting_list2);  
  23. ArrayList<ListItem> mList = setListDataTwo();  
  24.         MainListViewAdapter adapter = new MainListViewAdapter(getActivity().getApplicationContext(),mList);       
  25.         cornerListView2.setAdapter(adapter);
  26. }
  27.  
  28. /**  
  29.      * 设置列表数据  
  30.      */  
  31.     private ArrayList<ListItem>  setListDataOne(){  
  32.  
  33.      ArrayList<ListItem> mList = new ArrayList<ListItem>(); 
  34.      Resources res = this.getResources();   
  35.      ListItem item = new ListItem();  
  36.         item.setImage(res.getDrawable(R.drawable.set1));  
  37.         item.setTitle("图片");  
  38.         mList.add(item);  
  39.   
  40.         item = new ListItem();  
  41.         item.setImage(res.getDrawable(R.drawable.set2));  
  42.         item.setTitle("计算器");  
  43.         mList.add(item);  
  44.   
  45.         item = new ListItem();  
  46.         item.setImage(res.getDrawable(R.drawable.set3));  
  47.         item.setTitle("购物");  
  48.         mList.add(item);  
  49.   
  50.         item = new ListItem();  
  51.         item.setImage(res.getDrawable(R.drawable.set4));  
  52.         item.setTitle("地图");  
  53.         mList.add(item);  
  54.   
  55.         item = new ListItem();  
  56.         item.setImage(res.getDrawable(R.drawable.set5));  
  57.         item.setTitle("设置");  
  58.         mList.add(item);      
  59.         return mList;
  60.     }  
  61.     
  62.     private ArrayList<ListItem>  setListDataTwo(){  
  63.  
  64.      ArrayList<ListItem> mList = new ArrayList<ListItem>(); 
  65.      Resources res = this.getResources();   
  66.      ListItem item = new ListItem();  
  67.         item.setImage(res.getDrawable(R.drawable.set6));  
  68.         item.setTitle("超级模式");  
  69.         mList.add(item);  
  70.   
  71.         item = new ListItem();  
  72.         item.setImage(res.getDrawable(R.drawable.set7));  
  73.         item.setTitle("招贤纳士");  
  74.         mList.add(item);      
  75.         return mList;
  76.     }  
  77.  
  78. @Override
  79. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  80. Bundle savedInstanceState) {
  81. // TODO Auto-generated method stub
  82. //return super.onCreateView(inflater, container, savedInstanceState);
  83. return inflater.inflate(R.layout.seting, container, false);
  84. }
  85.  
  86. }

MainListViewAdapter.java:

  1. package com.lc.settings;
  2.  
  3. import java.util.ArrayList;
  4.  
  5. import com.lc.map.R;
  6.  
  7. import android.content.Context;
  8. import android.graphics.drawable.Drawable;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.BaseAdapter;
  13. import android.widget.ImageView;
  14. import android.widget.TextView;
  15.  
  16. public class MainListViewAdapter extends BaseAdapter {
  17.  
  18. public Context congb;
  19. public ArrayList<ListItem> mList;
  20. public MainListViewAdapter(Context _congb,ArrayList<ListItem> _mList)
  21. {
  22. congb = _congb;
  23. mList = _mList;  
  24. }
  25. @Override
  26. public int getCount() {
  27. // TODO Auto-generated method stub
  28. return mList.size();
  29. }
  30.  
  31. @Override
  32. public Object getItem(int position) {
  33. // TODO Auto-generated method stub
  34. return mList.get(position);
  35. }
  36.  
  37. @Override
  38. public long getItemId(int position) {
  39. // TODO Auto-generated method stub
  40. return position;
  41. }
  42.  
  43. @Override
  44. public View getView(int position, View convertView, ViewGroup parent) {
  45. ListItemView listItemView;  
  46.         // 初始化item view  
  47.         if (convertView == null) {  
  48.             // 通过LayoutInflater将xml中定义的视图实例化到一个View中  
  49.             convertView = LayoutInflater.from(congb).inflate(  
  50.                     R.layout.main_tab_setting_list_item, null);  
  51.  
  52.             // 实例化一个封装类ListItemView,并实例化它的两个域  
  53.             listItemView = new ListItemView();  
  54.             listItemView.imageView = (ImageView) convertView  
  55.                     .findViewById(R.id.iv_system_left);  
  56.             listItemView.textView = (TextView) convertView  
  57.                     .findViewById(R.id.tv_system_title);  
  58.  
  59.             // 将ListItemView对象传递给convertView  
  60.             convertView.setTag(listItemView);  
  61.         } else {  
  62.             // 从converView中获取ListItemView对象  
  63.             listItemView = (ListItemView) convertView.getTag();  
  64.         }  
  65.         // 获取到mList中指定索引位置的资源  
  66.         Drawable img = mList.get(position).getImage();  
  67.         String title = mList.get(position).getTitle();  
  68.  
  69.         // 将资源传递给ListItemView的两个域对象  
  70.         listItemView.imageView.setImageDrawable(img);  
  71.         listItemView.textView.setText(title);  
  72.        
  73.         // 返回convertView对象  
  74.         return convertView;  
  75. }
  76.  
  77. }
  78.  
  79.  
  80. /** 
  81.  * 封装两个视图组件的类 
  82.  */  
  83. class ListItemView {  
  84.     ImageView imageView;  
  85.     TextView textView;  
  86. }  
  87.   
  88. /** 
  89.  * 封装了两个资源的类 
  90.  */  
  91. class ListItem {  
  92.     private Drawable image;  
  93.     private String title;  
  94.  
  95.     public Drawable getImage() {  
  96.         return image;  
  97.     }  
  98.  
  99.     public void setImage(Drawable image) {  
  100.         this.image = image;  
  101.     }  
  102.  
  103.     public String getTitle() {  
  104.         return title;  
  105.     }  
  106.  
  107.     public void setTitle(String title) {  
  108.         this.title = title;  
  109.     }  
  110.  
  111. }

CornerListView.java:

  1. package com.lc.settings;
  2.  
  3. import com.lc.map.R;
  4.  
  5. import android.content.Context;
  6. import android.util.AttributeSet;
  7. import android.view.MotionEvent;
  8. import android.widget.AdapterView;
  9. import android.widget.ListView;
  10.  
  11. public class CornerListView extends ListView {
  12.  
  13.  public CornerListView(Context context) {  
  14.         super(context);  
  15.     }  
  16.   
  17.     public CornerListView(Context context, AttributeSet attrs, int defStyle) {  
  18.         super(context, attrs, defStyle);  
  19.     }  
  20.   
  21.     public CornerListView(Context context, AttributeSet attrs) {  
  22.         super(context, attrs);  
  23.     }  
  24.   
  25.     @Override  
  26.     public boolean onInterceptTouchEvent(MotionEvent ev) {  
  27.         switch (ev.getAction()) {  
  28.         case MotionEvent.ACTION_DOWN:  
  29.             int x = (int) ev.getX();  
  30.             int y = (int) ev.getY();  
  31.             int itemnum = pointToPosition(x, y);  
  32.             if (itemnum == AdapterView.INVALID_POSITION)  
  33.                 break;  
  34.             else {  
  35.                 if (itemnum == 0) {  
  36.                     if (itemnum == (getAdapter().getCount() - 1)) {  
  37.                         //只有一项  
  38.                         setSelector(R.drawable.app_list_corner_round);  
  39.                     } else {  
  40.                         //第一项  
  41.                         setSelector(R.drawable.app_list_corner_round_top);  
  42.                     }  
  43.                 } else if (itemnum == (getAdapter().getCount() - 1))  
  44.                     //最后一项  
  45.                     setSelector(R.drawable.app_list_corner_round_bottom);  
  46.                 else {  
  47.                     //中间项  
  48.                     setSelector(R.drawable.app_list_corner_round_center);  
  49.                 }  
  50.             }  
  51.             break;  
  52.         case MotionEvent.ACTION_UP:  
  53.             break;  
  54.         }  
  55.         return super.onInterceptTouchEvent(ev);  
  56.     }  
  57. }


注意1:背景与listview的颜色应该对比强烈一点

 2:listview与ScrollView的冲突问题

有时圆角并不是很好看,充满还好看一点,把圆角去掉把 android:layout_margin去掉,在看效果


下载地址:http://www.tnblog.net/resource/show/aojiancc2/dc65bfc707dd414d9b9916939d030c01



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

解决android studio运行出现Session 'app': Error Installing APKs错误

之前项目好好的,早上打开突然报错Session &#39;app&#39;: Error Installing APKs解决方法:选择Build———— clean proje...

android使用MPandroidChart开源图表折线图

1. 将mpandroidchartlibrary-2-1-6.ja包copy到项目的libs中在引用2:布局文件&lt;com.github.mikephil.charting.charts.Line...

android 弹出选择框简单通用弹出选择框

制作一个简单通用的弹出选择框LinearLayoutll=(LinearLayout)getActivity().findViewById(R.id.log_sel_qyport); ll.set...

android studio打包脱坑1

打包时出现的&#39;:app:validateExternalOverrideSigning&#39;问题报错如下解决方法错误的原因是找不到这个签名文件。由于K...

javaandroid 使用socket.io-client连接nodejs websocket

socket.io-client相比SocketIO.jar使用起来更方便一点publicvoidconnection(finalMapAction_action){ try{ IO.Optionsopt...

javaandroid 使用SocketIO.jar连接nodejs websocket

socket.io-client版连接nodejs websockethttp://www.tnblog.net/aojiancc2/article/details/2562一:更具url建立连接,调用...

Xamarin: android.permission.CALL_PHONE 的权限问题

写个电话拨号器,很简单就一个Edittext和一个button,用来输入号码并且点击按钮拨打电话,但是写好以后报的是安全错误,我上...

android 获取导航栏的高度

获取Android手机屏幕的高度/** *获取状态栏高度 * *@paramcontext上下文 *@return高度 */publicstaticintgetStatusBar...

android 代码

一、判断WiFi是否打开1、注册权限//需注册权限android.permission.ACCESS_WIFI_STATE WifiManagerwifiManager=(WifiManage...

ionic cordova platform add android报错

ionic各种环境以及配置完但是添加平台报错:Using cordova-fetch for anroidFailed to fetch platform anroidProbably this...

android 布局文件里输入框的值自动转换到类里边可以增加为空验证

android 布局文件里输入框的值自动转换到类里边,不用一个一个去读取在赋值先看看android遍历view子控件,用回调函数 /** ...

android 布局实例解析 格子菜单效果

使用android权重布局,使每个格子和间隔在不同手机中自动适配: &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8...

android后台动态添加布局文件、控件与动态设置属性

翻译布局文件布局文件 &lt;LinearLayout android:layout_width=&quot;fill_parent&quot; andro...

android后台动态添加布局文件、控件与动态设置属性2

原布局文件 &lt;ScrollView android:layout_width=&quot;wrap_content&quot; android:layout_heig...

android 绘制自定义控件,android绘制同心圆,android绘制小三角,android画虚线

一:实现同心圆加小三角指向效果 同心圆public class RingView extends View{ private Paint paint; privat...