国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android UI控件之ListView實現圓角效果

2019-10-22 18:19:40
字體:
來源:轉載
供稿:網友

今天在Android群里面有人再求圓角ListView的實現方式,正好自己以前實現過。因此就共享了現在將其實現方式寫在博客中共他人學習。給出實現方式之前順帶加點自己的想法,感覺上android中方形的ListView還是太“硬性”,沒有圓角的有親和力。連Apple也為了“圓角”這個設計去申請專利。

看來圓角確實比較適合現在人們的喜好吧。

照老規矩先上兩張效果圖吧:

第一張:

Android,UI,ListView,圓角

第二張:

Android,UI,ListView,圓角

該方式主要就是需要重新去實現自己的ListView代碼如下:

package com.kiritor.corner_listview;   import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.AdapterView; import android.widget.ListView;  /***  * 自定義listview  *  * @author Kiritor  *  */ public class MyListView extends ListView {  public MyListView(Context context) {   super(context);  }   public MyListView(Context context, AttributeSet attrs) {   super(context, attrs);  }   /****   * 攔截觸摸事件   */  @Override  public boolean onTouchEvent(MotionEvent ev) {   switch (ev.getAction()) {   case MotionEvent.ACTION_DOWN:    int x = (int) ev.getX();    int y = (int) ev.getY();    int itemnum = pointToPosition(x, y);    if (itemnum == AdapterView.INVALID_POSITION)     break;    else {     if (itemnum == 0) {      if (itemnum == (getAdapter().getCount() - 1)) {       // 只有一項數據,設置背景設置為圓角的       setSelector(R.drawable.list_round);      } else {       // 第一項,設置為上面為圓角的       setSelector(R.drawable.list_top_round);      }     } else if (itemnum == (getAdapter().getCount() - 1))      // 最后一項,設置為下面為圓角的      setSelector(R.drawable.list_bottom_round);     else {      // 中間項,不用設置為圓角      setSelector(R.drawable.list_center_round);     }    }    break;   case MotionEvent.ACTION_UP:    break;   }   return super.onTouchEvent(ev);  } } 

MainActivity

package com.kiritor.corner_listview;  import java.util.ArrayList; import java.util.HashMap; import java.util.Map;    import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.Toast;  public class MainActivity extends Activity implements OnItemClickListener {  private MyListView listView_1, listView_2, listView_3;  private ArrayList<Map<String, String>> listData, listData2, listData3;  private SimpleAdapter adapter;   @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   requestWindowFeature(Window.FEATURE_NO_TITLE);   setContentView(R.layout.main);   listView_1 = (MyListView) findViewById(R.id.mylistview_1);   listView_2 = (MyListView) findViewById(R.id.mylistview_2);   listView_3 = (MyListView) findViewById(R.id.mylistview_3);    listView_1.setAdapter(getSimpleAdapter_1());   listView_2.setAdapter(getSimpleAdapter_2());   listView_3.setAdapter(getSimpleAdapter_3());    listView_1.setOnItemClickListener(this);   listView_2.setOnItemClickListener(this);   listView_3.setOnItemClickListener(this);    setListViewHeightBasedOnChildren(listView_1);   setListViewHeightBasedOnChildren(listView_2);   setListViewHeightBasedOnChildren(listView_3);  }   /**   * 設置第一列數據   */  private SimpleAdapter getSimpleAdapter_1() {   listData = new ArrayList<Map<String, String>>();    Map<String, String> map = new HashMap<String, String>();   map.put("text", "天氣動畫");   listData.add(map);    map = new HashMap<String, String>();   map.put("text", "通知欄天氣");   listData.add(map);    return new SimpleAdapter(MainActivity.this, listData,     R.layout.list_item, new String[] { "text" },     new int[] { R.id.tv_list_item });   }   /**   * 設置第二列數據   */  private SimpleAdapter getSimpleAdapter_2() {   listData2 = new ArrayList<Map<String, String>>();    Map<String, String> map = new HashMap<String, String>();   map.put("text", "桌面插件");   listData2.add(map);    map = new HashMap<String, String>();   map.put("text", "綁定微博");   listData2.add(map);    map = new HashMap<String, String>();   map.put("text", "天氣分享");   listData2.add(map);    map = new HashMap<String, String>();   map.put("text", "通知與提示");   listData2.add(map);    map = new HashMap<String, String>();   map.put("text", "定時播報");   listData2.add(map);    return new SimpleAdapter(MainActivity.this, listData2,     R.layout.list_item, new String[] { "text" },     new int[] { R.id.tv_list_item });   }   /**   * 設置第三列數據   */  private SimpleAdapter getSimpleAdapter_3() {   listData3 = new ArrayList<Map<String, String>>();    Map<String, String> map = new HashMap<String, String>();   map.put("text", "檢查新版本");   listData3.add(map);    map = new HashMap<String, String>();   map.put("text", "發送建議");   listData3.add(map);    map = new HashMap<String, String>();   map.put("text", "幫助");   listData3.add(map);    map = new HashMap<String, String>();   map.put("text", "關于");   listData3.add(map);    return new SimpleAdapter(MainActivity.this, listData3,     R.layout.list_item, new String[] { "text" },     new int[] { R.id.tv_list_item });   }   /***   * 動態設置listview的高度   *   * @param listView   */  public void setListViewHeightBasedOnChildren(ListView listView) {   ListAdapter listAdapter = listView.getAdapter();   if (listAdapter == null) {    return;   }   int totalHeight = 0;   for (int i = 0; i < listAdapter.getCount(); i++) {    View listItem = listAdapter.getView(i, null, listView);    listItem.measure(0, 0);    totalHeight += listItem.getMeasuredHeight();   }   ViewGroup.LayoutParams params = listView.getLayoutParams();   params.height = totalHeight     + (listView.getDividerHeight() * (listAdapter.getCount() - 1));   // params.height += 5;// if without this statement,the listview will be   // a   // little short   // listView.getDividerHeight()獲取子項間分隔符占用的高度   // params.height最后得到整個ListView完整顯示需要的高度   listView.setLayoutParams(params);  }   @Override  public void onItemClick(AdapterView<?> parent, View view, int position,    long id) {      if (parent == listView_1) {    Map<String, String> map = listData.get(position);    Toast.makeText(MainActivity.this, map.get("text"), 1).show();   } else if (parent == listView_2) {    Map<String, String> map = listData2.get(position);    Toast.makeText(MainActivity.this, map.get("text"), 1).show();   } else if (parent == listView_3) {    Map<String, String> map = listData3.get(position);    Toast.makeText(MainActivity.this, map.get("text"), 1).show();   }   }  } 

差不多也就是這樣了,還有相關資源文件。

Android,UI,ListView,圓角

這里就不一一給出了。 

完整源碼部分:ListView實現圓角效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海林市| 洛川县| 五台县| 漳平市| 新沂市| 安泽县| 南平市| 屏边| 东山县| 沂南县| 册亨县| 久治县| 高邑县| 阳高县| 新干县| 烟台市| 霞浦县| 紫阳县| 织金县| 博白县| 江阴市| 潼南县| 乌拉特前旗| 夏津县| 烟台市| 永顺县| 清水县| 饶河县| 荣成市| 马关县| 尼勒克县| 雷州市| 西城区| 黑水县| 万盛区| 印江| 桐庐县| 永泰县| 松潘县| 曲靖市| 石河子市|