替换PopUpWindow(解决焦点获取问题)实现顶部筛选菜单(顶部不变,底部阴暗)

很多人写顶部筛选菜单或弹窗都会用到PopUpWindow,但是PopUpWindow也不是万能的,现在商业App的一些界面功能实现使用PopUpWindow无法达到需要的效果(焦点问题,顶部明亮,底部阴暗问题)因此本人在此写了一个demo可以实现顶部弹出筛选布局(不使用PopUpWindow)

核心代码如下:


package com.example.james;


import java.util.ArrayList;
import java.util.List;


import com.example.james.FlightBargainTicketTopFilterView.OnViewChangeLisener;


import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;


public class MyPopView2 <T extends View> extends LinearLayout{


private LinearLayout ll;
RelativeLayout rl;

OnViewChangeLisener mViewChangeLisener;
MyAdapter myAdapter;
ListView mListView;
EditText mEditText;
TextView textView;
TextView textView2;
View view;
RadioButton mRadioButton;
TextView currentb;
    int currentLayoutId = -1;
Animation dropdown_in, dropdown_out;
private boolean isShowing = false;
private Context context;
private static final int OPEN_STATE = 0;
private static final int CLOSE_STATE = -1;
private int state = CLOSE_STATE;
String[][] str = {{"a","b","100","100","100","100","100","100","100","100","100","100","100"},{"c","d"},{"e","f"}};
private ImageView mImageView;
private TextView mTextView;


public MyPopView2(Context context) {
super(context);
// TODO Auto-generated constructor stub
this.context = context;
init();
}


public MyPopView2(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
this.context = context;
init();
}


private void init() {
LayoutInflater inflater = LayoutInflater.from(getContext());
view = inflater.inflate(R.layout.my_listview, this,false);
mEditText = (EditText) view.findViewById(R.id.edt);
textView = (TextView)view.findViewById(R.id.hot);
textView2 = (TextView)view.findViewById(R.id.history);
ll = (LinearLayout)view.findViewById(R.id.list_layout);
ll.setVisibility(View.VISIBLE);
rl = (RelativeLayout)view.findViewById(R.id.bt_layout);
mListView = (ListView) view.findViewById(R.id.list);
addView(view);
initAnimate();
}


private void initAnimate(){
dropdown_in = AnimationUtils.loadAnimation(context,R.anim.dropdown_in);
        dropdown_out = AnimationUtils.loadAnimation(context,R.anim.dropdown_out);
}



private List<View> triggers = new ArrayList<View>();
public void addItem(int index, T trigger, TextView optionTextView,
ImageView optionImageView, String str){
optionTextView.setText(str);
triggers.add(trigger);
trigger.setOnClickListener(new MyClickClass(index,optionImageView,optionTextView));
mImageView = optionImageView;
mTextView = optionTextView;
}
private void showMyPopView(){
show();

}
public void closeMyPopView(){
hide();
setState(mImageView,state,mTextView);
}

private class MyClickClass implements OnClickListener{


int index;
ImageView im;
TextView tv;
MyClickClass(int index,ImageView im,TextView tv){
this.index = index;
this.im = im;
this.tv = tv;
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Log.e("currentLayoutId",String.valueOf(currentLayoutId));
Log.e("index",String.valueOf(index));
if(state == OPEN_STATE&&currentLayoutId==index){
closeMyPopView();
Log.e("james","close");
}
else {
if(currentLayoutId==-1){
myAdapter = new MyAdapter(getContext(), str[index]);
mListView.setAdapter(myAdapter);
mListView.setOnItemClickListener(new MyOnItemClickClass(str[index],tv));
showMyPopView();
}
else{
myAdapter.updateList(str[index]);
}
currentLayoutId = index;
setState(im,state,tv);
Log.e("james","open");
}
}
}
private class MyOnItemClickClass implements OnItemClickListener{


TextView tv;
String[] str;
MyOnItemClickClass(String[] str,TextView tv){
this.str = str;
this.tv =tv;
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
tv.setText(str[arg2]);
closeMyPopView();
}

}

private void setState(ImageView im, int isOpen, TextView mtv) {
for (int i = 0; i < triggers.size(); i++) {
TextView tv = (TextView) triggers.get(i).findViewById(
R.id.option_item_title);
ImageView img = (ImageView) triggers.get(i).findViewById(
R.id.top_first_img);
img.setSelected(false);
tv.setSelected(false);
}
if (isOpen == OPEN_STATE) {
im.setSelected(true);
mtv.setSelected(true);
}


}



public void show() {
// TODO Auto-generated method stub
mOnMaskViewListener.onMask(1);
startAnimation(dropdown_in);
setVisibility(View.VISIBLE);
isShowing = true;
state = OPEN_STATE;

}
public void hide() {
// TODO Auto-generated method stub
mOnMaskViewListener.onMask(0);
        startAnimation(dropdown_out);
        setVisibility(View.GONE);
        currentLayoutId = -1;
        isShowing = false;
        state = CLOSE_STATE;
}
public boolean isShowing(){
return state == OPEN_STATE ?true:false;
}

OnMaskViewListener mOnMaskViewListener;


public void setOnMaskViewListener(OnMaskViewListener mOnMaskViewListener) {
this.mOnMaskViewListener = mOnMaskViewListener;
}


public interface OnMaskViewListener {
public void onMask(int flag);
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值