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

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

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

时间: 2016-11-01

Android实现阅读APP平移翻页效果

自己做的一个APP需要用到翻页阅读,网上看过立体翻页效果,不过bug太多了还不兼容.看了一下多看阅读翻页是采用平移翻页的,于是就仿写了一个平移翻页的控件.效果如下: 在翻页时页面右边缘绘制了阴影,效果还不错.要实现这种平移翻页控件并不难,只需要定义一个布局管理页面就可以了.具体实现上有以下难点: 1.循环翻页,页面的重复利用. 2.在翻页时过滤掉多点触碰. 3.采用setAdapter的方式设置页面布局和数据. 下面就来一一解决这几个难点.首先看循环翻页问题,怎么样能采用较少的页面实现这种翻页呢

Android实现阅读进度记忆功能

本文实例为大家分享了Android控件WebView实现保存阅读进度的具体代码,供大家参考,具体内容如下 用户提了一个要求,要求保存他的阅读进度,然后在他下次阅读的时候可以继续阅读,然后动手实现了一下,是这样的. 我用的控件是WebView public class WebViewClientEmb extends WebViewClient { // 在WebView中而不是系统默认浏览器中显示页面 @Override public boolean shouldOverrideUrlLoadi

android阅读器长按选择文字功能实现代码

前言: 有时候我们需要实现长按选择文字功能,比如阅读器一般都有这个功能,有时候某个自定义控件上可能就有这种需求,如何实现呢?正好最近还算闲,想完善一下自己写的那个轻量级的txt文件阅读器(比如这个长按选择文字的功能就想加进去).于是花了两三天时间,实现了这个功能,效果还是不错的. 首先先看看效果图吧: 授人以鱼不如授人以渔,下面具体实现原理的教程. 1.实现原理 原理其实也不难,简单总结就是:绘制文字时把显示的文字的坐标记录下来(记录文字的左上右上左下右下四个点坐标),作用就是为了计算滑动范围.

Android编程实现小说阅读器滑动效果的方法

本文实例讲述了Android编程实现小说阅读器滑动效果的方法.分享给大家供大家参考,具体如下: 看过小说都知道小说阅读器翻页有好多种效果,比如仿真翻页,滑动翻页,等等.由于某种原因,突然想写一个简单点的滑动翻页效果.在这里写出来也没有什么意图,希望大家可以根据这个效果举一反三,写出其他的效果.图就不上了. 下面是代码:大家理解onTouch事件即可 package com.example.testscroll.view; import android.content.Context; impor

Android编程之界面跳动提示动画效果实现方法

本文实例讲述了Android编程之界面跳动提示动画效果实现方法.分享给大家供大家参考,具体如下: 上一个效果图: 先上布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" a

Android编程设定activity进入和退出效果的方法

本文实例讲述了Android编程设定activity进入和退出效果的方法.分享给大家供大家参考,具体如下: 看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了.设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给

Android编程实现ImageView图片抛物线动画效果的方法

本文实例讲述了Android编程实现ImageView图片抛物线动画效果的方法.分享给大家供大家参考,具体如下: 想实现抛物线动画,必须知道抛物线的方程,这时候数学其作用了,假如有如图的抛物线: 按照抛物线的方程特别,知道任何的三点可以确定一条抛物线,由已知抛物线的标注 方程为 y = ax² + bx + c:假设A1坐标为(0,0),A2坐标为(300,0),A3坐标为(150,300):联合解方程得知该抛物线的方程为 y = -1/75 x² + 4x:由此方程,我们可以确定抛物线x和y的

Android编程中ViewPage判断左右滑动方向的方法

本文实例讲述了Android编程中ViewPage判断左右滑动方向的方法.分享给大家供大家参考,具体如下: package com.meityitian.app.views; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.util.Log; import com.meityitian.app.uti

Android编程实现上方通知栏里闪动效果的方法

本文实例讲述了Android编程实现上方通知栏里闪动效果的方法.分享给大家供大家参考,具体如下: 显示通知代码: private void showNotification(Context ctx, String url) { Notification n = new Notification(); n.flags |= Notification.FLAG_SHOW_LIGHTS; n.flags |= Notification.FLAG_AUTO_CANCEL; n.defaults = No

Android编程实现ViewPager多页面滑动切换及动画效果的方法

本文实例讲述了Android编程实现ViewPager多页面滑动切换及动画效果的方法.分享给大家供大家参考,具体如下: 一.首先,我们来看一下效果图,这是新浪微博的Tab滑动效果.我们可以手势滑动,也可以点击上面的头标进行切换.与此同方式, 白色横条会移动到相应的页卡头标下.这是一个动画效果,白条是缓慢滑动过去的.好了,接下来我们就来实现它. 二.在开始前,我们先要认识一个控件,ViewPager.它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换. 这个附加包是and

Android编程实现Gallery中每次滑动只显示一页的方法

本文实例讲述了Android编程实现Gallery中每次滑动只显示一页的方法.分享给大家供大家参考,具体如下: import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.MotionEvent; import android.widget.Gallery; public class DetialGallery extends

用python给自己做一款小说阅读器过程详解

前言 前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本书要1300多张,算了一下,需要200大洋才行,而且等他说完,还不知道要到什么时候去. 所以就找文字版的来读,文字版又有它的缺点,你必须手眼联动才行.如果要忙别的事情,但是又抑制不住想看的冲动,就很纠结了.在网上找了一圈,没有其他的音频.而且以前用的那些有阅读功能的软件,比如微信阅读.追书神器

android开发通过Scroller实现过渡滑动效果操作示例

本文实例讲述了android开发通过Scroller实现过渡滑动效果.分享给大家供大家参考,具体如下: 主要介绍一下Scroller这个类,它可以实现过渡滑动的效果,使滑动看起来不是那么生硬,当然它用大量的重绘来实现,invalidate();通过源码看: 看构造方法 /** * Create a Scroller with the default duration and interpolator. */ public Scroller(Context context) { this(cont