导航菜单横向左右滑动并和下方的控件实现联动

实现原理是上方使用HorizontalScrollView这个可以水平横向拖动的控件,在其中加入了5个RadioButton;下方使用的是ViewPager,里面加入了7个Layout文件,其中第一个和最后一个为空,是为了实现拖到第一个屏幕的时候还能往外拖动的效果。

package com.zj.popupwindow;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
 
import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
         
        private boolean mIsopen = false;        //是否已经打开
        private ImageView mImageView;                //三角形图标
        private LinearLayout mLinearLayout;
        private PopupWindow mPopupWindow;
        private ArrayList> mArrayList;
         
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        mLinearLayout = (LinearLayout)findViewById(R.id.pop_parent);
        mImageView = (ImageView)findViewById(R.id.imageView1);
         
        mLinearLayout.setOnClickListener(new OnClickListener() {
                         
                        @Override
                        public void onClick(View v) {
                                 
                                mIsopen = !mIsopen;
                                if (mIsopen) {
                                        mImageView.setBackgroundResource(R.drawable.icon_arrow_down);
                                }else {
                                        mImageView.setBackgroundResource(R.drawable.icon_arrow_up);
                                }
                                 
                                //设置popupwindow中的listView
                                mArrayList = createData();
                                View _View = getLayoutInflater().inflate(R.layout.popupwindow, null);
                                ListView _ListView = (ListView) _View.findViewById(R.id.list);
                                SimpleAdapter _SimpleAdapter = new SimpleAdapter(
                                                MainActivity.this, mArrayList, 
                                                R.layout.listview_item, new String[]{"zj"}, 
                                                new int[]{R.id.list_item_txt}
                                );
                                _ListView.setAdapter(_SimpleAdapter);
                                _ListView.setOnItemClickListener(new MyListOnItemClick());
                                /*
                                 * 这个去掉了也没什么影响,先留下
                                 * 通过ListView的setItemsCanFocus(true)方法并不可以使ItemView
                                 * 在touch mode下可以获取焦点,他只是表明在由ListAdapter创建的视图中
                                 * ,可包含能获得焦点的项目.
                                 */
                                _ListView.setItemsCanFocus(false);
                                 
                                //设置PopupWindow
                                mPopupWindow = new PopupWindow(
                                                _View,
                                                160, 
                                                220
                                );
                                 
                                //注意下面所做的4条是为了使 点击popuWindow 以外的区域能够关闭它。
                                // 使其聚焦
                                mPopupWindow.setFocusable(true);
                                // 设置允许在外点击消失
                                mPopupWindow.setOutsideTouchable(true);
                                //刷新状态 
                                mPopupWindow.update();
                                 
                                //点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener
                                mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
                                 
                                mPopupWindow.showAsDropDown(findViewById(R.id.pop_parent), -50, 0);
                                //mPopupWindow.showAtLocation(findViewById(R.id.pop_parent), Gravity.CENTER_HORIZONTAL | Gravity.TOP, 0, (int)getResources().getDimension(R.dimen.pop_y));
                                mPopupWindow.setOnDismissListener(new OnDismissListener() {
                                         
                                        @Override
                                        public void onDismiss() {
                                                mIsopen = ! mIsopen;
                                                if (mIsopen) {
                                                        mImageView.setBackgroundResource(R.drawable.icon_arrow_down);
                                                }else {
                                                        mImageView.setBackgroundResource(R.drawable.icon_arrow_up);
                                                }
                                                Log.i("zj", "onDismiss");
                                        }
                                });
                                 
                        }
                });
         
    }
     
    private ArrayList> createData(){
             
            HashMap map1 = new HashMap();
            map1.put("zj", "美食");
             
            HashMap map2 = new HashMap();
            map2.put("zj", "娱乐");
             
            HashMap map3 = new HashMap();
            map3.put("zj", "购物");
             
            HashMap map4 = new HashMap();
            map4.put("zj", "电影");
             
            ArrayList> _ArrayList = new ArrayList>();
             
            _ArrayList.add(map1);
            _ArrayList.add(map2);
            _ArrayList.add(map3);
            _ArrayList.add(map4);
             
            return _ArrayList;
    }
     
    class MyListOnItemClick implements OnItemClickListener{
 
                @Override
                public void onItemClick(AdapterView arg0, View arg1, int arg2,
                                long arg3) {
                        // TODO Auto-generated method stub
                        HashMap temp = mArrayList.get(arg2);
                        mPopupWindow.dismiss();
                        Toast.makeText(MainActivity.this, temp.get("zj").toString(), 1).show();
                }
             
    }
}



        
                
                        
                                
                                
                                
                                
                                
                        
                        
                
        
        

http://zhengjiong.iteye.com/blog/1539951

ZJ_HorizontalScrollView.rar


你可能感兴趣的:(android)