您好,登錄后才能下訂單哦!
使用Android實現(xiàn)圓角ListView效果?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
實現(xiàn)方式。
先看一下Android 中Shape的使用方法:
solid:實心,就是填充的意思
android:color指定填充的顏色
gradient:漸變
android:startColor和android:endColor分別為起始和結(jié)束顏色,ndroid:angle是漸變角度,必須為45的整數(shù)倍。
另外漸變默認(rèn)的模式為android:type="linear",即線性漸變,可以指定漸變?yōu)閺较驖u變,android:type="radial",徑向漸變需要指定半徑android:gradientRadius="50"。
stroke:描邊
android:width="2dp" 描邊的寬度,android:color 描邊的顏色。
我們還可以把描邊弄成虛線的形式,設(shè)置方式為:
android:dashWidth="5dp"
android:dashGap="3dp"
其中android:dashWidth表示'-'這樣一個橫線的寬度,android:dashGap表示之間隔開的距離。
corners:圓角
android:radius為角的弧度,值越大角越圓。
當(dāng)然,這里并不是說這種圓角的列表一段是ListView來實現(xiàn)的,可能是由多個LinearLayout/RelativeLayout疊起來的。這個就看你怎么取舍了;如果列表項固定不怎么變化可以采取后者來實現(xiàn)比較好,如果需要動態(tài)變化那么使用ListView來實現(xiàn)更優(yōu)。
下面來定義一下ListView只有一項時的背景(上下兩個角都是圓角) app_list_corner_round.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <!-- 漸變 --> <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <!-- 圓角 --> <corners android:bottomLeftRadius="4dip" android:bottomRightRadius="4dip" android:topLeftRadius="4dip" android:topRightRadius="4dip" /> </shape>
ListView第一項的背景(上面是圓角,下面是直角) app_list_corner_round_top.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <corners android:topLeftRadius="@dimen/app_list_radius" android:topRightRadius="@dimen/app_list_radius" /> </shape>
ListView最后一項的背景(上面是直角,下面是圓角) app_list_corner_round_bottom.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> <corners android:bottomLeftRadius="@dimen/app_list_radius" android:bottomRightRadius="@dimen/app_list_radius" /> </shape>
ListView中間項的背景(上下都是直角) app_list_corner_round_center.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="270" android:endColor="@color/white" android:startColor="@color/white" /> </shape>
接下來先看看Adapter的實現(xiàn)
package com.example.roundcorner.adapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.example.roundcorner.R; import com.example.roundcorner.entity.ListBean; public class ListAdapter extends BaseAdapter { private List<ListBean> mList; private Context mContext; public ListAdapter(Context mContext,List<ListBean> mList) { this.mList = mList; this.mContext = mContext.getApplicationContext(); } @Override public int getCount() { return this.mList.size(); } @Override public Object getItem(int position) { return this.mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public int getItemViewType(int position) { // TODO Auto-generated method stub return super.getItemViewType(position); } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return super.getViewTypeCount(); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(this.mContext).inflate( R.layout.listview_item, null, false); holder.textView = (TextView) convertView .findViewById(R.id.listview_item_textview); holder.imageView = (ImageView) convertView .findViewById(R.id.listview_item_imageview); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if(position==0){ if(position == getCount()-1){ //只有一項 convertView.setBackgroundResource(R.drawable.app_list_corner_round); }else{ //第一項 convertView.setBackgroundResource(R.drawable.app_list_corner_round_top); } }else if(position == getCount()-1){ convertView.setBackgroundResource(R.drawable.app_list_corner_round_bottom); }else{ convertView.setBackgroundResource(R.drawable.app_list_corner_round_center); } ListBean lb = mList.get(position); holder.textView.setText(lb.getKey()); return convertView; } static class ViewHolder { TextView textView; ImageView imageView; } }
listview_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/listview_item_textview" android:layout_width="wrap_content" android:layout_height="48dp" android:paddingLeft="10dp" android:gravity="center_vertical" android:layout_centerVertical="true" android:text="A-H" android:textColor="@color/black" android:textSize="20sp" /> <ImageView android:id="@+id/listview_item_imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/arrow" android:layout_alignParentRight="true" android:layout_centerVertical="true" /> </RelativeLayout>
最后看看主界面Activity的實現(xiàn)
package com.example.roundcorner; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; import com.example.roundcorner.adapter.ListAdapter; import com.example.roundcorner.entity.ListBean; public class MainActivity extends Activity { private List<ListBean> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); findView(); } private void findView() { ListView mListView = (ListView) findViewById(R.id.mListView); ListAdapter mAdapter = new ListAdapter(this,data); mListView.setAdapter(mAdapter); } private void initData() { data = new ArrayList<ListBean>(); for (int i = 0; i < 5; i++) { ListBean lb = new ListBean(); lb.setKey("設(shè)置 "+i); data.add(lb); } } }
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="48dp" android:background="@color/white" android:gravity="center" android:text="設(shè)置" android:textSize="20sp" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp" > <ListView android:id="@+id/mListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/app_list_round" android:cacheColorHint="@android:color/transparent" android:divider="@drawable/app_list_divider" android:dividerHeight="2dip" android:padding="2dp" /> </RelativeLayout> </LinearLayout>
關(guān)于使用Android實現(xiàn)圓角ListView效果問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。