您的位置:首页 > 移动开发 > Android开发

Android PopupWindow加入自定义圆角listview

2014-01-08 12:12 417 查看
圆角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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: