热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

本篇文章介绍了android仿新闻阅读器菜单弹出效果实例,现在很多阅读器都有这个功能,需要的朋友可以看一下。

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

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

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

其实这个实现起来很简单,看其效果,其实就是一个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); 
    } 
  } 
} 

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

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

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

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


推荐阅读
  • Linux Shell变量初探:初始值解析与使用指南
    本文探讨了Linux Shell中变量的基本概念及其在BASH中的应用。变量是用于存储可变数据的标识符,能够代表不同的值。文章详细介绍了BASH shell的主要优势,包括强大的命令编辑能力、自动补全功能、命令别名设置、作业控制以及前后台任务管理。此外,还涵盖了编程脚本编写和通配符的使用方法,为初学者提供了全面的指导。 ... [详细]
  • 求助:在CentOS 5.8系统上安装PECL扩展遇到问题
    在 CentOS 5.8 系统上尝试安装 APC 扩展时遇到了问题,具体表现为 PECL 工具无法正常工作。为了确保顺利安装,需要解决 PECL 的相关依赖和配置问题。建议检查 PHP 和 PECL 的版本兼容性,并确保所有必要的库和开发工具已正确安装。此外,可以尝试手动下载 APC 扩展的源代码并进行编译安装,以绕过 PECL 工具的限制。 ... [详细]
  • 1. 设置用户密码:使用 `slappasswd` 工具生成加密密码,确保账户安全。具体步骤如下:输入命令 `slappasswd -s NewPassword`,系统将提示重新输入新密码,并生成加密后的哈希值 {SSHA}xxxxxxxxxxxxxxxxx。2. 编写配置文件:编辑 `vildapus` 配置文件,添加必要的用户账户信息,以确保新用户能够顺利登录系统。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 基于SSH框架的高校学生宿舍管理平台设计与实现
    本研究基于SSH(Struts、Spring、Hibernate)框架,设计并实现了一套高校学生宿舍管理平台。该平台采用Eclipse MyEclipse作为开发工具,运行环境为Tomcat 8服务器,使用JDK 1.8进行开发,数据库选用MySQL。系统功能涵盖学生信息管理、宿舍分配、费用结算等模块,旨在提高宿舍管理的效率和准确性,适用于高校宿舍管理的课程设计项目。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 在项目开发过程中,掌握一些关键的Linux命令至关重要。例如,使用 `Ctrl+C` 可以立即终止当前正在执行的命令;通过 `ps -ef | grep ias` 可以查看特定服务的进程信息,包括进程ID(PID)和JVM参数(如内存分配和远程连接端口);而 `netstat -apn | more` 则用于显示网络连接状态,帮助开发者监控和调试网络服务。这些命令不仅提高了开发效率,还能有效解决运行时的各种问题。 ... [详细]
  • 在Linux系统中,为了提高安全性,可以通过设置命令执行超时和用户超时注销来防止因用户长时间未操作而带来的安全隐患。具体而言,可以通过编辑 `/etc/profile` 文件,添加或修改相关参数,确保用户在指定时间内无操作后自动注销。此外,还可以利用 `timeout` 命令来限制特定命令的执行时间,进一步增强系统的稳定性和安全性。 ... [详细]
  • 在CentOS 6.5环境中,本文详细介绍了如何配置SSH无密钥登录,并成功执行PSSH命令。首先,确保系统已安装PSSH工具,可使用 `yum install pssh` 进行安装。若未配置免密钥登录,PSSH命令将无法正常执行,例如尝试运行 `pssh -H root@192.168.245.129 -i uptime` 时会失败。通过生成并分发SSH公钥,可以实现无密码登录,从而顺利执行PSSH命令。此外,本文还提供了详细的步骤和常见问题的解决方案,帮助用户顺利完成配置。 ... [详细]
  • 构建高可用性Spark分布式集群:大数据环境下的最佳实践
    在构建高可用性的Spark分布式集群过程中,确保所有节点之间的无密码登录是至关重要的一步。通过在每个节点上生成SSH密钥对(使用 `ssh-keygen -t rsa` 命令并保持默认设置),可以实现这一目标。此外,还需将生成的公钥分发到所有节点的 `~/.ssh/authorized_keys` 文件中,以确保节点间的无缝通信。为了进一步提升集群的稳定性和性能,建议采用负载均衡和故障恢复机制,并定期进行系统监控和维护。 ... [详细]
  • 在使用SSHFS进行远程文件系统挂载时,经常遇到连接被对端重置的问题。经过详细排查,发现客户端使用的SSH版本与服务器端不兼容,导致连接失败。本文将深入分析该问题的原因,并提供多种解决方案,包括更新SSH客户端、调整SSH配置参数以及优化网络环境,以确保SSHFS连接的稳定性和可靠性。 ... [详细]
  • 探讨两种常数卷积的结果与一种常见的洗牌算法错误及其影响
    在编程中,随机打乱数组元素的顺序(即“洗牌”)是一个常见的需求。标准的洗牌算法是Fisher-Yates shuffle,但许多开发者在实现时容易犯错,导致结果不均匀。本文探讨了两种常数卷积的结果,并分析了一种常见的洗牌算法错误及其对随机性的影响。通过详细的实验和理论分析,我们揭示了这些错误的具体表现和潜在危害,为开发者提供改进的建议。 ... [详细]
  • 在通过SSH连接到大学服务器中的指定主机时,系统会自动分配一台特定的计算机。为了确保连接顺利,用户需要了解正确的SSH命令格式和必要的配置步骤。此外,掌握如何查看分配的主机信息和进行身份验证也是关键。 ... [详细]
  • 本文详细解析了神州数码DCRS5980交换机的基础配置流程和技术要点。首先,通过进入配置模式(`enable`),设置主机名(`hostname 5980`),并创建VLAN,逐步介绍了设备的初始设置步骤。此外,还涵盖了端口配置、IP地址分配及安全设置等关键环节,为用户提供了全面的配置指导。 ... [详细]
author-avatar
手机用户2502919817_667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有