专栏首页恩蓝脚本Android自定义PopWindow带动画向下弹出效果

Android自定义PopWindow带动画向下弹出效果

本文实例为大家分享了PopWindow实现带动画向下弹出效果的具体代码,供大家参考,具体内容如下

首先建一个popwin的实体类

package dmpte.mytest;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;

public class PopWin extends PopupWindow {
 private Context mContext;
 private View view;


 public PopWin(final Context mContext, View.OnClickListener itemsOnClick, int flag) {
  this.mContext = mContext;
  this.view = LayoutInflater.from(mContext).inflate(R.layout.view_popwin, null);
  // 设置外部可点击
  this.setOutsideTouchable(true);
  /* 设置弹出窗口特征 */
  // 设置视图
  this.setContentView(this.view);
  // 设置弹出窗体的宽和高
  this.setHeight(RelativeLayout.LayoutParams.WRAP_CONTENT);//高
  this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT);//宽

  // 设置弹出窗体可点击
  this.setFocusable(true);

  // 设置弹出窗体显示时的动画,从底部向上弹出
  this.setAnimationStyle(R.style.take_photo_anim);
//  mMenuView添加OnTouchListener监听判断获取触屏位置如果在选择框外面则销毁弹出框
  this.view.setOnTouchListener(new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    int height = view.findViewById(R.id.pop_layout).getHeight();
    int y = (int) event.getY();
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
    //Y表示手指点击的位置,屏幕顶端为0,往下一次递增。height是popwin的高度。y   height就表示手指点在popwin的外面,然后关闭popwin
     if (y   height) {
      dismiss();
     }
    }
    return true;
   }

  });

 }

}

然后是这个类的布局 view_popwin.xml

<?xml version="1.0" encoding="utf-8"? 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/pop_layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@null"
 android:orientation="vertical" 

 <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="170dp"
  android:background="#ffff"
  android:orientation="vertical" 

  <TextView
   android:id="@+id/tv_jingtai"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_gravity="center"
   android:layout_marginTop="2dp"
   android:gravity="center"
   android:text="移动静态"
   android:textColor="#f123" / 

 </LinearLayout 
</LinearLayout 

接下来是这个类里涉及的动画 popwin_anim,在res/values/styles下

<style name="popwin_anim" parent="android:Animation" 
    <item name="android:windowEnterAnimation" @anim/pop_enter_anim</item 
    <item name="android:windowExitAnimation" @anim/pop_exit_anim</item 
</style 

然后是进场动画 pop_enter_anim和出场动画 pop_exit_anim,在res下建一个文件夹anim,分别新建上面两个xml

pop_enter_anim.xml

<?xml version="1.0" encoding="utf-8"? 
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="false" 
 <!-- 平移动画 -- 
 <translate
  android:duration="500"
  android:fromYDelta="-100%p"
  android:toYDelta="0" / 
</set 

pop_exit_anim.xml

<?xml version="1.0" encoding="utf-8"? 
<set xmlns:android="http://schemas.android.com/apk/res/android"
 android:shareInterpolator="false" 
 <!-- 平移动画 -- 
 <translate
  android:duration="1000"
  android:fromYDelta="0"
  android:toYDelta="-100%p" / 

</set 

最后是使用

//让背景变暗
 WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.alpha = 0.7f;
    getWindow().setAttributes(lp);
    //弹出窗体
    PopWin popWin_ = new PopWin(this, null, 0);
    popWin_.showAsDropDown(findViewById(R.id.relativeLayout));
    //监听popwin是否关闭,关闭的话让背景恢复
    popWin_.setOnDismissListener(new PopupWindow.OnDismissListener() {
     @Override
     public void onDismiss() {
      WindowManager.LayoutParams lp = getWindow().getAttributes();
      lp.alpha = 1f;
      getWindow().setAttributes(lp);
  }
});

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android单选按钮RadioButton的使用详解

    RadioButton是最普通的UI组件之一,继承了Button类,可以直接使用Button支持的各种属性和方法。

    砸漏
  • android短信管理器SmsManager实例详解

    本文实例为大家分享了android短信管理器SmsManager的具体代码,供大家参考,具体内容如下

    砸漏
  • Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    第一部分:沉浸式状态栏(API-Level 19, Android4.4 KitKat 之后加入的东西),而且在Api-Level 21版本中新增了一个属性(下...

    砸漏
  • Android使用Fragment仿微信底部导航栏

    下面是给每个Fragment添加按钮的点击事件,值得注意的是,在Fragment的点击事件跟Activity不一完全相同,在获取空间是不是直接findViewB...

    夜雨飘零
  • 仿优酷Android客户端图片左右滑动(自动滑动)

    最终效果: ? 页面布局main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns...

    欢醉
  • Android实现调用摄像头和相册的方法

    因为涉及到向SD卡写入数据,所有需要在AndroidMainfest.xml中声明响应权限

    砸漏
  • Android单选按钮RadioButton的使用详解

    RadioButton是最普通的UI组件之一,继承了Button类,可以直接使用Button支持的各种属性和方法。

    砸漏
  • Android沉浸式状态栏 + actionBar渐变 + scrollView顶部伸缩效果

    第一部分:沉浸式状态栏(API-Level 19, Android4.4 KitKat 之后加入的东西),而且在Api-Level 21版本中新增了一个属性(下...

    砸漏
  • android短信管理器SmsManager实例详解

    本文实例为大家分享了android短信管理器SmsManager的具体代码,供大家参考,具体内容如下

    砸漏
  • Android ListView列表视图的使用方法

    当你要将某个从数据库或者文件中获得相当大的数据,在界面中向用户展示的时候,由于定义一个个视图比较麻烦,Android中提供了类似于数组的控件–ListView。

    砸漏

扫码关注云+社区

领取腾讯云代金券