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

所属分类: 软件编程 / Android 阅读数: 33
收藏 0 赞 0 分享

开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能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的下载地址:下载地址

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

更多精彩内容其他人还在看

Android设计登录界面、找回密码、注册功能

这篇文章主要为大家详细介绍了Android设计登录界面的方法,Android实现找回密码、注册功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android通过手势实现答题器翻页效果

这篇文章主要为大家详细介绍了Android通过手势实现答题器翻页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android采用双缓冲技术实现画板

这篇文章主要为大家详细介绍了Android采用双缓冲技术实现画板的相关资料,思路清晰,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android开发之毛玻璃效果实例代码

这篇文章主要给大家分享android开发之毛玻璃效果的实例代码,非常具有参考借鉴价值,感兴趣的朋友一起学习吧
收藏 0 赞 0 分享

Android实现桌面悬浮窗、蒙板效果实例代码

这篇文章主要介绍了Android实现桌面悬浮窗、蒙板效果实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

深入解读Android的Volley库的功能结构

这篇文章主要介绍了Android的Volley开发框架的功能结构,Volley是Android开发中网络部分的一大利器,包含很多HTTP协议通信的相关操作,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发中使用Volley库发送HTTP请求的实例教程

这篇文章主要介绍了Android开发中使用Volley库发送HTTP请求的实例教程,包括创建Volley单例的基本知识与取消Request请求的技巧等,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿QQ聊天撒花特效 很真实

本文写的这个特效,是关于聊天的,你肯定遇到过,就是你跟人家聊天的时候,比如发送应(么么哒),然后屏幕上全部就是表情了,今天我们就是做这个,撒花的特效,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android的HTTP操作库Volley的基本使用教程

这篇文章主要介绍了Android的HTTP操作库Volley的基本使用教程,包括JSON请求与图片加载等用法的实例,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿水波纹流量球进度条控制器

这篇文章主要介绍了Android仿水波纹流量球进度条控制器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多