0
点赞
收藏
分享

微信扫一扫

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


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

android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)_ide

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

下面看看代码的思路:

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


[java]  view plain  copy




  1. public class MyAdapter extends BaseAdapter {  
  2. null;  
  3.     Activity activity;  
  4.     ArrayList<News> newslist;  
  5. private PopupWindow popupWindow;  
  6.   
  7. public MyAdapter(Activity activity, ArrayList<News> newslist) {  
  8. this.activity = activity;  
  9. this.newslist = newslist;  
  10.         inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
  11.         initPopWindow();  
  12.     }  
  13.   
  14. @Override  
  15. public int getCount() {  
  16. return newslist != null ? newslist.size() : 0;  
  17.     }  
  18.   
  19. @Override  
  20. public News getItem(int position) {  
  21. if (newslist != null && newslist.size() != 0) {  
  22. return newslist.get(position);  
  23.         }  
  24. return null;  
  25.     }  
  26.   
  27. @Override  
  28. public long getItemId(int position) {  
  29. return position;  
  30.     }  
  31.   
  32. @Override  
  33. public View getView(final int position, View convertView, ViewGroup parent) {  
  34.         View vi = convertView;  
  35. final ViewHolder holder;  
  36. if (vi == null) {  
  37. null);  
  38. new ViewHolder();  
  39.             holder.item_title = (TextView) vi.findViewById(R.id.item_title);  
  40.             holder.item_content = (TextView) vi.findViewById(R.id.item_content);  
  41.             holder.button_showpop = (ImageView) vi.findViewById(R.id.button_showpop);  
  42.             vi.setTag(holder);  
  43. else {  
  44.             holder = (ViewHolder) vi.getTag();  
  45.         }  
  46.         News news = getItem(position);  
  47.         holder.item_title.setText(news.getTitle());  
  48.         holder.item_content.setText(news.getContent());  
  49. new popAction(position));  
  50. return vi;  
  51.     }  
  52.   
  53. public class ViewHolder {  
  54.         TextView item_title;  
  55.         TextView item_content;  
  56.         ImageView button_showpop;  
  57.     }  
  58.       
  59. /** 
  60.      * 初始化popWindow
  61.      * */  
  62. private void initPopWindow() {  
  63. null);  
  64. new PopupWindow(popView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);  
  65. new ColorDrawable(0));  
  66. //设置popwindow出现和消失动画  
  67.         popupWindow.setAnimationStyle(R.style.PopMenuAnimation);  
  68.         btn_pop_close = (ImageView) popView.findViewById(R.id.btn_pop_close);  
  69.     }  
  70.       
  71. /** popWindow 关闭按钮 */  
  72. private ImageView btn_pop_close;  
  73.       
  74. /** 
  75.      * 显示popWindow
  76.      * */  
  77. public void showPop(View parent, int x, int y,int postion) {  
  78. //设置popwindow显示位置  
  79. 0, x, y);  
  80. //获取popwindow焦点  
  81. true);  
  82. //设置popwindow如果点击外面区域,便关闭。  
  83. true);  
  84.         popupWindow.update();  
  85. if (popupWindow.isShowing()) {  
  86.               
  87.         }  
  88. new OnClickListener() {  
  89. public void onClick(View paramView) {  
  90.                 popupWindow.dismiss();  
  91.             }  
  92.         });  
  93.     }  
  94.       
  95. /** 
  96.      * 每个ITEM中more按钮对应的点击动作
  97.      * */  
  98. public class popAction implements OnClickListener{  
  99. int position;  
  100. public popAction(int position){  
  101. this.position = position;  
  102.         }  
  103. @Override  
  104. public void onClick(View v) {  
  105. int[] arrayOfInt = new int[2];  
  106. //获取点击按钮的坐标  
  107.             v.getLocationOnScreen(arrayOfInt);  
  108. int x = arrayOfInt[0];  
  109. int y = arrayOfInt[1];  
  110.             showPop(v, x , y, position);  
  111.         }  
  112.     }  
  113. }  


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

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

android 仿 新闻阅读器 菜单弹出效果(附源码DEMO)_ide_02





举报

相关推荐

0 条评论