天天看点

PopupWindow+listItem 泡泡效果

PopupWindow+listItem 泡泡效果

package com.my;

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.view.Gravity;

import android.view.MotionEvent;

import android.view.View;

import android.view.ViewGroup;

import android.view.View.OnTouchListener;

import android.view.animation.Animation;

import android.view.animation.TranslateAnimation;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.BaseAdapter;

import android.widget.LinearLayout;

import android.widget.ListView;

import android.widget.PopupWindow;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.TextView;

import android.widget.Toast;

public class PopupwindowFoListItemActivity extends Activity implements OnItemClickListener {

    String[] data;

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        initData();

        setContentView(initView());

    }

    private void initData() {

        data = new String[40];

        for (int i = 0; i < data.length; i++) {

            data[i] = "item" + i;

        }

    }

    private LinearLayout initView() {

        LinearLayout linearLayout = new LinearLayout(this);

        ListView listView = new ListView(this);

        listView.setAdapter(new MyAdapter());

        listView.setOnItemClickListener(this);

        //设置listview的触摸监听事件 当用户触摸 Popupwindow窗口以外的东西时 Popwindow隐藏

        listView.setOnTouchListener(new View.OnTouchListener() {

            @Override

            public boolean onTouch(View v, MotionEvent event) {

                Log.d("dbug","onTouch");

                if(popupWindow!=null&&popupWindow.isShowing())

                {                   

                    popupWindow.dismiss();

                    popupWindow =null;

                } 

                return false;

            }

        });

        linearLayout.addView(listView);

        return linearLayout;

    }

    PopupWindow popupWindow;   

    @Override

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        Toast.makeText(this,""+position,Toast.LENGTH_SHORT).show();

        LinearLayout layout = (LinearLayout)View.inflate(this, R.layout.main, null);

        if (popupWindow == null) {

            popupWindow = new PopupWindow(layout);

            popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, 0, 0);

            //设置窗口的宽度和高度

            popupWindow.setWidth(view.getWidth());

            popupWindow.setHeight(view.getHeight());

            // // requestWindowFeature(Window.FEATURE_NO_TITLE);没有标题时: int y =

            // view.getTop()+38;

            // // 当requestWindowFeature()为默认值时:int y = view.getTop()+75;

            // //当设置为全屏时int y = view.getTop();由此title部分为75-38=37 title上面部分为38

            //得到窗口y轴的值

            int y = view.getTop() + 75;

            //设置窗口的动画

           popupWindow.setAnimationStyle(R.style.AnimationPreview);

//            popupWindow.setFocusable(true); 

            popupWindow.update(0, y, view.getWidth(), view.getHeight()); 

        } else {

            popupWindow.dismiss();

            popupWindow = null;

        }

    }

    class MyAdapter extends BaseAdapter {

        @Override

        public int getCount() {

            // TODO Auto-generated method stub

            return data.length;

        }

        @Override

        public Object getItem(int position) {

            // TODO Auto-generated method stub

            return null;

        }

        @Override

        public long getItemId(int position) {

            // TODO Auto-generated method stub

            return 0;

        }

        @Override

        public View getView(int position, View convertView, ViewGroup parent) {

            LinearLayout linearLayout = (LinearLayout)View.inflate(PopupwindowFoListItemActivity.this,R.layout.listitem, null);

            TextView textView =(TextView)linearLayout.findViewById(R.id.tv1);

            textView.setText(data[position]);

            return linearLayout;

        }

    }

}