圆角listview最快捷,最直接的方法是给listview加背景图片。这里只介绍另一种方法,自定义listview,在onDraw()方法中画圆角矩形。
主界面xml:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="38dp"
android:text="show PopupWindow" />
</RelativeLayout>
MainActivity:
package com.example.framelistview;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
public class MainActivity extends Activity implements OnClickListener {
private Context context;
private PopupWindow m_popupWindow;
private borderListView m_listView;//自定义圆角listview
private View m_popuView;
private View m_parentView;
private Button m_button;
private ListAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化
context = MainActivity.this;
m_parentView = getLayoutInflater()
.inflate(R.layout.activity_main, null);
m_popuView = getLayoutInflater().inflate(R.layout.popup_view, null);
m_listView = (borderListView) m_popuView.findViewById(R.id.listView1);
m_popupWindow = new PopupWindow(m_popuView, 200, 300);
m_button = (Button) findViewById(R.id.button1);
adapter = new ListAdapter(context);
m_button.setOnClickListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:点击显示popupwindow
int location[] = new int[2];
m_button.getLocationInWindow(location);//获得按钮的坐标,放入数组location中
if (m_popupWindow.isShowing()) {
m_popupWindow.dismiss();//隐藏popupwindow
} else {
m_listView.setAdapter(adapter);
m_popupWindow.showAtLocation(m_parentView, Gravity.LEFT
| Gravity.TOP, location[0], location[1]+70);
//显示popupwindow 第一个参数主界面view,第二个参数 定义参考点,第三四参数 popupwindow大小
}
break;
default:
break;
}
}
}
PopupWindow模板xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<com.example.framelistview.borderListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</com.example.framelistview.borderListView>
</LinearLayout>
自定义圆角listview xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
自定义Adapter:
package com.example.framelistview;
import java.util.ArrayList;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ListAdapter extends BaseAdapter {
private Context context;
private ArrayList<String> m_arrayList;
private LayoutInflater m_Inflater;
public ListAdapter(Context context) {
m_arrayList = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
m_arrayList.add("Item " + i);
Log.d("123", "i=====" + i);
}
this.context = context;
m_Inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return m_arrayList.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return m_arrayList.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
ViewHolder holder;
if (arg1 == null) {
arg1 = m_Inflater.inflate(R.layout.list_view, null);
holder = new ViewHolder();
holder.tv = (TextView) arg1.findViewById(R.id.textView1);
arg1.setTag(holder);
} else {
holder = (ViewHolder) arg1.getTag();
}
holder.tv.setText(m_arrayList.get(arg0));
return arg1;
}
static class ViewHolder {
public TextView tv;
}
}
自定义圆角listview:
package com.example.framelistview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ListView;
public class borderListView extends ListView {
public borderListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public borderListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
protected void onDraw(Canvas canvas) {
float width = getWidth();
float height = getHeight();
int lineWidth = 10; // 线宽十个像素
int grayColor = Color.BLACK;
Paint mLinePaint = new Paint();
mLinePaint.setColor(grayColor);
mLinePaint.setStyle(Paint.Style.STROKE);
int r = 50;
mLinePaint.setAntiAlias(true);
mLinePaint.setStrokeWidth(lineWidth);
// 画矩形
RectF oval = new RectF(0f + lineWidth / 2, 0f + lineWidth / 2, width // 矩形区域(左上角坐标,右下角坐标)
- lineWidth / 2, height - lineWidth / 2);
canvas.drawRoundRect(oval, 20, 20, mLinePaint);//参数一 矩形区域,参数二 x轴半径,参数三 y轴半径,参数四 画笔
super.onDraw(canvas);
}
}