首页 > 系统 > Android > 正文

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

2019-12-12 04:48:48
字体:
来源:转载
供稿:网友

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

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

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

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

下面看看代码的思路:

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

public class MyAdapter extends BaseAdapter {   LayoutInflater inflater = null;   Activity activity;   ArrayList<News> newslist;   private PopupWindow popupWindow;    public MyAdapter(Activity activity, ArrayList<News> 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);     }   } } 

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

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表