iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android实现微博菜单弹出效果
  • 925
分享到

Android实现微博菜单弹出效果

android菜单弹出 2023-05-30 23:05:31 925人浏览 泡泡鱼
摘要

先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。 说一下实现思路: 截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片; 2、创建popupwindow,完成

先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。

 Android实现微博菜单弹出效果

说一下实现思路:

截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片;
2、创建popupwindow,完成布局,这儿要注意:View的移动范围是由parent的大小决定的,就是只能在parent的范围内移动;
3、给买个View添加进入动画,每个比前一个延期50ms播放动画,关闭窗口时相反;
4、为View的动画添加回弹插值器;

MoreWindow.java窗口

package com.jerome.weibo;  import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.canvas; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationSet; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.RelativeLayout.LayoutParams;  public class MoreWindow extends PopupWindow implements OnClickListener{   private String TAG = MoreWindow.class.getSimpleName();  Activity mContext;  private int mWidth;  private int mHeight;  private int statusBarHeight ;  private Bitmap mBitmap= null;  private Bitmap overlay = null;    private Handler mHandler = new Handler();   public MoreWindow(Activity context) {   mContext = context;  }   public void init() {   Rect frame = new Rect();   mContext.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);   statusBarHeight = frame.top;   DisplayMetrics metrics = new DisplayMetrics();   mContext.getWindowManager().getDefaultDisplay()     .getMetrics(metrics);   mWidth = metrics.widthPixels;   mHeight = metrics.heightPixels;      setWidth(mWidth);   setHeight(mHeight);  }    private Bitmap blur() {   if (null != overlay) {    return overlay;   }   long startMs = System.currentTimeMillis();    View view = mContext.getWindow().getDecorView();   view.setDrawinGCacheEnabled(true);   view.buildDrawingCache(true);   mBitmap = view.getDrawingCache();      float scaleFactor = 8;//图片缩放比例;   float radius = 10;//模糊程度   int width = mBitmap.getWidth();   int height = mBitmap.getHeight();    overlay = Bitmap.createBitmap((int) (width / scaleFactor),(int) (height / scaleFactor),Bitmap.Config.ARGB_8888);   Canvas canvas = new Canvas(overlay);   canvas.scale(1 / scaleFactor, 1 / scaleFactor);   Paint paint = new Paint();   paint.setFlags(Paint.FILTER_BITMAP_FLAG);   canvas.drawBitmap(mBitmap, 0, 0, paint);    overlay = FastBlur.doBlur(overlay, (int) radius, true);   Log.i(TAG, "blur time is:"+(System.currentTimeMillis() - startMs));   return overlay;  }    private Animation showAnimation1(final View view,int fromY ,int toY) {   AnimationSet set = new AnimationSet(true);   TranslateAnimation Go = new TranslateAnimation(0, 0, fromY, toY);   go.setDuration(300);   TranslateAnimation go1 = new TranslateAnimation(0, 0, -10, 2);   go1.setDuration(100);   go1.setStartOffset(250);   set.addAnimation(go1);   set.addAnimation(go);    set.setAnimationListener(new AnimationListener() {     @Override    public void onAnimationEnd(Animation animation) {    }     @Override    public void onAnimationRepeat(Animation animation) {     }     @Override    public void onAnimationStart(Animation animation) {     }    });   return set;  }     public void showMoreWindow(View anchor,int bottomMargin) {   final RelativeLayout layout = (RelativeLayout)LayoutInflater.from(mContext).inflate(R.layout.center_music_more_window, null);   setContentView(layout);      ImageView close= (ImageView)layout.findViewById(R.id.center_music_window_close);   android.widget.RelativeLayout.LayoutParams params =new android.widget.RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);   params.bottomMargin = bottomMargin;   params.addRule(RelativeLayout.BELOW, R.id.more_window_auto);   params.addRule(RelativeLayout.RIGHT_OF, R.id.more_window_collect);   params.topMargin = 200;   params.leftMargin = 18;   close.setLayoutParams(params);      close.setOnClickListener(new OnClickListener() {     @Override    public void onClick(View v) {     if (isshowing()) {      closeAnimation(layout);     }    }    });      showAnimation(layout);   setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), blur()));   setOutsideTouchable(true);   setFocusable(true);   showAtLocation(anchor, Gravity.BOTTOM, 0, statusBarHeight);  }   private void showAnimation(ViewGroup layout){   for(int i=0;i<layout.getChildCount();i++){    final View child = layout.getChildAt(i);    if(child.getId() == R.id.center_music_window_close){     continue;    }    child.setOnClickListener(this);    child.setVisibility(View.INVISIBLE);    mHandler.postDelayed(new Runnable() {          @Override     public void run() {      child.setVisibility(View.VISIBLE);      ValueAnimator fadeAnim = ObjectAnimator.ofFloat(child, "translationY", 600, 0);      fadeAnim.setDuration(300);      KickBackAnimator kickAnimator = new KickBackAnimator();      kickAnimator.setDuration(150);      fadeAnim.setEvaluator(kickAnimator);      fadeAnim.start();     }    }, i * 50);   }     }   private void closeAnimation(ViewGroup layout){   for(int i=0;i<layout.getChildCount();i++){    final View child = layout.getChildAt(i);    if(child.getId() == R.id.center_music_window_close){     continue;    }    child.setOnClickListener(this);    mHandler.postDelayed(new Runnable() {          @Override     public void run() {      child.setVisibility(View.VISIBLE);      ValueAnimator fadeAnim = ObjectAnimator.ofFloat(child, "translationY", 0, 600);      fadeAnim.setDuration(200);      KickBackAnimator kickAnimator = new KickBackAnimator();      kickAnimator.setDuration(100);      fadeAnim.setEvaluator(kickAnimator);      fadeAnim.start();      fadeAnim.addListener(new AnimatorListener() {              @Override       public void onAnimationStart(Animator animation) {        // TODO Auto-generated method stub               }              @Override       public void onAnimationRepeat(Animator animation) {        // TODO Auto-generated method stub               }              @Override       public void onAnimationEnd(Animator animation) {        child.setVisibility(View.INVISIBLE);       }              @Override       public void onAnimationCancel(Animator animation) {        // TODO Auto-generated method stub               }      });     }    }, (layout.getChildCount()-i-1) * 30);        if(child.getId() == R.id.more_window_local){     mHandler.postDelayed(new Runnable() {            @Override      public void run() {       dismiss();      }     }, (layout.getChildCount()-i) * 30 + 80);    }   }     }   @Override  public void onClick(View v) {   switch (v.getId()) {   case R.id.more_window_local:    break;   case R.id.more_window_online:    break;   case R.id.more_window_delete:    break;   case R.id.more_window_collect:    break;   case R.id.more_window_auto:    break;   case R.id.more_window_external:    break;    default:    break;   }  }    public void destroy() {   if (null != overlay) {    overlay.recycle();    overlay = null;    System.gc();   }   if (null != mBitmap) {    mBitmap.recycle();    mBitmap = null;    System.gc();   }  }   } 

--结束END--

本文标题: Android实现微博菜单弹出效果

本文链接: https://www.lsjlt.com/news/222131.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android实现微博菜单弹出效果
    先上Android仿微博菜单弹出效果图,这个截图不是很流畅,大家可以下载apk试一下。 说一下实现思路: 截取当前窗口,对图片做高斯模糊处理,将处理后的图片做popupwindow的背景图片; 2、创建popupwindow,完成...
    99+
    2023-05-30
    android 菜单弹出
  • Android实现毛玻璃效果弹出菜单动画
    本文实例为大家分享了Android实现毛玻璃效果弹出菜单动画的具体代码,供大家参考,具体内容如下 仿ios上屏幕下方向上滑出来的一个模糊菜单,效果如下 原理很简单,页面上原来有...
    99+
    2022-11-13
    Android毛玻璃效果 Android毛玻璃菜单 Android弹出菜单
  • Android PopupMenu弹出菜单的实现
    Android PopupMenu弹出菜单的实现(1)布局文件:用于弹出菜单的处罚button:<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and...
    99+
    2023-05-30
    android popupmenu roi
  • Android如何实现仿网易严选底部弹出菜单效果
    这篇文章将为大家详细讲解有关Android如何实现仿网易严选底部弹出菜单效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先展示效果图如下:是不是还可以呢,由于代码量不多却注释详细,所以先贴出代码再一一...
    99+
    2023-05-30
    android
  • Android studio实现菜单效果
    本文实例为大家分享了Android studio实现菜单效果的具体代码,供大家参考,具体内容如下 一、onCreateOptionsMenu() 首先在res目录下新建一个menu文...
    99+
    2024-04-02
  • CSS中怎么实现二级弹出菜单效果
    这篇文章将为大家详细讲解有关CSS中怎么实现二级弹出菜单效果,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。具体代码如下:<!DOCTYPE ...
    99+
    2024-04-02
  • android长按弹出菜单怎么实现
    要实现Android长按弹出菜单,可以按照以下步骤进行操作:1. 在你的Activity中,为你想要实现长按弹出菜单的View注册一...
    99+
    2023-08-12
    android
  • 微信小程序怎么实现菜单弹出的阻尼动画效果
    本篇内容主要讲解“微信小程序怎么实现菜单弹出的阻尼动画效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序怎么实现菜单弹出的阻尼动画效果”吧!实现代码结构如下:新建组件menu:menu...
    99+
    2023-06-26
  • Android Drawerlayout实现侧滑菜单效果
    本文实例为大家分享了Drawerlayout侧滑菜单的具体代码,供大家参考,具体内容如下Drawerlayout的xml布局<?xml version="1.0" encoding="utf-8"?><Re...
    99+
    2023-05-30
    drawerlayout 侧滑菜单 roi
  • Android仿新浪微博发送菜单界面的实现
    目录效果图自定义Dialog布局文件Style工具方法接口效果图 接下来就是一波贴代码的过程 自定义Dialog public class SinaSendView exten...
    99+
    2024-04-02
  • Android实现蒙版弹出框效果
    本文实例为大家分享了Android蒙版弹出框效果的具体代码,供大家参考,具体内容如下自定义package cn.lxsdb.yyd.app.dialog; import cn.lxsdb.yyd.app.R; import cn.lxsd...
    99+
    2023-05-31
    android 蒙版 弹出框
  • Android studio实现PopupWindow弹出框效果
    本文实例为大家分享了Android studio实现PopupWindow弹出框的具体代码,供大家参考,具体内容如下 实现步骤: 第一步:自定义.xml布局文件 <?...
    99+
    2024-04-02
  • Android如何实现底部缓慢弹出菜单
    这篇文章主要介绍了Android如何实现底部缓慢弹出菜单,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目要求要做一个从底部缓慢弹出一个Button Menu 开始编码: M...
    99+
    2023-05-30
    android
  • Android仿微信底部菜单栏效果
    前言在市面上,大多数的APP都需要通过底部菜单栏来将程序的功能进行分类整理,通常都是分为3-5个大模块,从而正确有效地引导用户去使用我们的APP。实现底部菜单栏的方法也有很多种。1.仿微信底部菜单栏(ViewPager+ImagerView...
    99+
    2023-05-30
    android 菜单
  • Android菜单栏DIY实现效果详解
    目录前言实现的效果和思路1. 绘制底部布局2. 添加子view3. 处理事件分发4. 做个动画5. 小结前言 个人打算开发个视频编辑的APP,然后把一些用上的技术总结一下,这次主要是...
    99+
    2024-04-02
  • vue实现右键弹出菜单
    在最近工作中,有一个需求,需要做一个表格,并且对该表格右键弹出菜单支持增删改,这里做下总结,功能截图如下: 首先定义菜单结构 <!-- 菜单 --> <div c...
    99+
    2024-04-02
  • Android使用DrawerLayout实现侧滑菜单效果
    一、概述DrawerLayout是一个可以方便的实现Android侧滑菜单的组件,我最近开发的项目中也有一个侧滑菜单的功能,于是DrawerLayout就派上用场了。如果你从未使用过DrawerLayout,那么本篇博客将使用一个简单的案例...
    99+
    2023-05-30
    android drawerlayout 侧滑菜单
  • Android卫星菜单效果的实现方法
    Android小白第一次写博客,心情无比激动。下面给大家展示一下卫星菜单的实现。1.简单介绍卫星菜单在应用程序中,有很多展示菜单的方式,但其功能都是大同小异,这样一来,菜单的美观以及展示方式就显的尤为重要,卫星菜单就是很不错的一种。下面是本...
    99+
    2023-05-31
    android 卫星菜单 roi
  • android自定义左侧滑出菜单效果
    这里给大家提供一个类似QQ聊天那种可以左侧滑出菜单的自定义控件。希望对大家有帮助。参考了一些网友的做法,自己整理优化了一下,用法非常简单,就一个类,不需要自己写任何的代码,只要添加上...
    99+
    2024-04-02
  • Flutter实现PopupMenu(弹出设置菜单)
    PopupMenuButton简介 PopupMenuButton是一个用于创建弹出菜单的小部件。它通常与IconButton或其他触发菜单显示的小部件一起使用。当用户点击触发按钮时,PopupMen...
    99+
    2023-09-28
    flutter android PopupMenuButton PopupMenuItem 弹出设置菜单
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作