Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)
这一系列博文都是:(android高仿系列)今日头条 --新闻阅读器 (一)
开发中碰到问题之后实现的,觉得可能有的开发者用的到或则希望独立成一个小功能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() : ;
    }
    @Override
    public News getItem(int position) {
        if (newslist != null && newslist.size() != ) {
            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());
        //设置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, , 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[];
            //获取点击按钮的坐标
            v.getLocationOnScreen(arrayOfInt);
            int x = arrayOfInt[];
            int y = arrayOfInt[];
            showPop(v, x , y, position);
        }
    }
}
就这么多的内容,很简单,日后碰到这类相关的效果,也就不用怕了。
下面是我经过上述代码实现的效果:

下面放上该效果源码DEMO的下载地址:下载地址
Android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)的更多相关文章
- Android 高仿 频道管理----网易、今日头条、腾讯视频 (可以拖动的GridView)附源码DEMO
		距离上次发布(android高仿系列)今日头条 --新闻阅读器 (二) 相关的内容已经半个月了,最近利用空闲时间,把今日头条客户端完善了下.完善的功能一个一个全部实现后,就放整个源码.开发的进度就是按 ... 
- android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码
		Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ... 
- Android开发实战之底部Dialog弹出效果
		在Android开发中,有很多情况下我们需要使用到对话框,遗憾的是,安卓自带的对话框样式不能满足我们实际的需要,所以往往需要我们自定义对话框,具体做法:写一个对话框继承自Dialog实现他的一个构造方 ... 
- layer弹出层 layer源码
		下载源码:点击下载 ;!function(window, undefined){ "use strict"; var pathType = true, //是否采用自动获取绝对路径 ... 
- iOS头条新闻App、自动布局、省市区联动、登录按钮动画、Alert弹框效果等源码
		iOS精选源码 LEEAlert -- 优雅的Alert ActionSheet 登录按钮 省市区三级联动 JHViewCorner - 一行代码搞定圆角 JHFrameLayout - 一行代码实现 ... 
- 分类导航菜单的制作(附源码)--HTML
		不多说,直接贴代码哈!有疑问,可追加评论哈! demo.html: <!DOCTYPE html><html> <head> <title>分类导航菜单 ... 
- Android  音视频深入  四  录视频MP4(附源码下载)
		本篇项目地址,名字是<录音视频(有的播放器不能放,而且没有时长显示)>,求star https://github.com/979451341/Audio-and-video-learnin ... 
- jquery仿淘宝购物车页面商品结算(附源码)
		1.效果图如下: 2.源码如下: html部分: <!doctype html> <html lang="en"> <head> <met ... 
- Android 音视频深入 五 完美的录视频(附源码下载)
		本篇项目地址,名字是录视频,求star https://github.com/979451341/Audio-and-video-learning-materials 这一次的代码录视频在各个播放器都 ... 
随机推荐
- Scala-LIST/Tuple/Map
			环境: CentOS 6.3 LIST(列表) 代码: $ cat list.scala var mylist = List(1,2,3) println(mylist) var mylist1 = ... 
- C#的SplitPanel如何设置上下和左右
			定位到Orientation属性即可 
- C - The C Answer (2nd Edition) - Exercise 1-5
			/* Modify the temperature conversion program to print the table in reverse order, that is, from 300 ... 
- Spring——IoC
			控制反转(Inversion ofControl,英文缩写为IoC)是一种能够解耦的方法,不是什么技术.是一种思想,也是轻量级的Spring框架的核心.控制反转一般分为两种类型.依赖注入(Depend ... 
- 免安装版TOMCAT配置及问题解决方法
			前言 本文将介绍下面几点内容: 1.Tomcat的配置过程 2.启动startup过程中遇到的问题的解决 3.假设遇到本文中没有提到的问题怎样解决 配置 计算机右击->属性->高级系统设置 ... 
- java struts jxl 导入导出Excel(无模板)
			jar包: import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.io.Fil ... 
- JavaScript基础 -- js常用内置方法和对象
			JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ... 
- HDU5834Magic boy Bi Luo with his excited tree 树形dp
			分析:典型的两遍dfs树形dp,先统计到子树的,再统计从祖先来的,dp[i][0]代表从从子树回来的最大值,dp[i][1]代表不回来,id[i]记录从i开始到哪不回来 吐槽:赛场上想到了状态,但是不 ... 
- 21 WPF数据视图
			视图对象 当你绑定集合到ItemsControl,在幕后数据视图被安静地创造.视图位于数据源和绑定控件之间.数据视图是通往数据源的一个窗口.它跟踪当前项目,它支持诸如排序,过滤,和分组特征.这些特征独 ... 
- 深入理解JMM(Java内存模型) --(二)重排序
			[转载自并发编程网 – ifeve.com 原文链接:http://ifeve.com/tag/jmm/] 数据依赖性 如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存 ... 
