android实现阅读器底部菜单,android仿新闻阅读器菜单弹出效果实例(附源码DEMO下载)...

开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能DEMO,所以就放出来这么一个DEMO。

原本觉得是最后完成后发网站客户端的,可是这样体现不出一个功能一个功能的分析实现效果,而且周期时间长,所以就完成一部分,发一部分,敬请谅解。

下面的菜单弹出效果在很多的新闻阅读器上都有,比如今日头条、360新闻等。

a3bafea492854a8d4e506575839c1327.gif

其实这个实现起来很简单,看其效果,其实就是一个PopupWindow,之后设定相应postion的按钮点击属性,之后获取按钮的位置,给它设置动画显示消失就可以出现了。

下面看看代码的思路:

由于整体是一个LISTVIEW,所以我把点击的事件写到了对应的Adapter适配器中。

public class MyAdapter extends BaseAdapter {

LayoutInflater inflater = null;

Activity activity;

ArrayList newslist;

private PopupWindow popupWindow;

public MyAdapter(Activity activity, ArrayList newslist) {

this.activity = activity;

this.newslist = newslist;

inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

initPopWindow();

}

@Override

public int getCount() {

return newslist != null ? newslist.size() : 0;

}

@Override

public News getItem(int position) {

if (newslist != null && newslist.size() != 0) {

return newslist.get(position);

}

return null;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

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

View vi = convertView;

final ViewHolder holder;

if (vi == null) {

vi = inflater.inflate(R.layout.listview_item, null);

holder = new ViewHolder();

holder.item_title = (TextView) vi.findViewById(R.id.item_title);

holder.item_content = (TextView) vi.findViewById(R.id.item_content);

holder.button_showpop = (ImageView) vi.findViewById(R.id.button_showpop);

vi.setTag(holder);

} else {

holder = (ViewHolder) vi.getTag();

}

News news = getItem(position);

holder.item_title.setText(news.getTitle());

holder.item_content.setText(news.getContent());

holder.button_showpop .setOnClickListener(new popAction(position));

return vi;

}

public class ViewHolder {

TextView item_title;

TextView item_content;

ImageView button_showpop;

}

/**

* 初始化popWindow

* */

private void initPopWindow() {

View popView = inflater.inflate(R.layout.listview_pop, null);

popupWindow = new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

popupWindow.setBackgroundDrawable(new ColorDrawable(0));

//设置popwindow出现和消失动画

popupWindow.setAnimationStyle(R.style.PopMenuAnimation);

btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);

}

/** popWindow 关闭按钮 */

private ImageView btn_pop_close;

/**

* 显示popWindow

* */

public void showPop(View parent, int x, int y,int postion) {

//设置popwindow显示位置

popupWindow.showAtLocation(parent, 0, x, y);

//获取popwindow焦点

popupWindow.setFocusable(true);

//设置popwindow如果点击外面区域,便关闭。

popupWindow.setOutsideTouchable(true);

popupWindow.update();

if (popupWindow.isShowing()) {

}

btn_pop_close.setOnClickListener(new OnClickListener() {

public void onClick(View paramView) {

popupWindow.dismiss();

}

});

}

/**

* 每个ITEM中more按钮对应的点击动作

* */

public class popAction implements OnClickListener{

int position;

public popAction(int position){

this.position = position;

}

@Override

public void onClick(View v) {

int[] arrayOfInt = new int[2];

//获取点击按钮的坐标

v.getLocationOnScreen(arrayOfInt);

int x = arrayOfInt[0];

int y = arrayOfInt[1];

showPop(v, x , y, position);

}

}

}

就这么多的内容,很简单,日后碰到这类相关的效果,也就不用怕了。

下面是我经过上述代码实现的效果:

8bfdfc5fd2cdfa46f2f7be2335b838b6.gif

下面放上该效果源码DEMO的下载地址:下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值