Android 自定义PopupWindow动画效果

public class RollActivity extends Activity {
    private View view;
    private Button btn;
    private PopupWindow mPopupWindow;
    private View[] btns;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        LinearLayout layout=(LinearLayout) view.findViewById(R.id.layout_main);
//        //设置背景图片旋转180
//        Bitmap mBitmap=setRotate(R.drawable.bg_kuang);
//        BitmapDrawable drawable=new BitmapDrawable(mBitmap);
//        layout.setBackgroundDrawable(drawable);

        btn=(Button) this.findViewById(R.id.btn);
        btn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showPopupWindow(btn);
            }

        });

        initPopupWindow(R.layout.popwindow);

    }

    private void initPopupWindow(int resId){
        LayoutInflater mLayoutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
        view = mLayoutInflater.inflate(resId, null);

        mPopupWindow = new PopupWindow(view, 400,LayoutParams.WRAP_CONTENT);
//        mPopupWindow.setBackgroundDrawable(new BitmapDrawable());//必须设置background才能消失
        mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_frame));
        mPopupWindow.setOutsideTouchable(true);

        //自定义动画
//        mPopupWindow.setAnimationStyle(R.style.PopupAnimation);
        //使用系统动画
        mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
        mPopupWindow.update();
        mPopupWindow.setTouchable(true);
        mPopupWindow.setFocusable(true);

        btns=new View[3];
        btns[0]=view.findViewById(R.id.btn_0);
        btns[1]=view.findViewById(R.id.btn_1);
        btns[2]=view.findViewById(R.id.btn_2);
        btns[0].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //doSomething
            }
        });
        btns[1].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //doSomething
            }
        });
        btns[2].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //doSomething
            }
        });
    }
    private void showPopupWindow(View view) {
        if(!mPopupWindow.isShowing()){
//            mPopupWindow.showAsDropDown(view,0,0);
            mPopupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
        }
    }
    public Bitmap setRotate(int resId) {
        Matrix mFgMatrix = new Matrix();
        Bitmap mFgBitmap = BitmapFactory.decodeResource(getResources(), resId);
        mFgMatrix.setRotate(180f);
        return mFgBitmap=Bitmap.createBitmap(mFgBitmap, 0, 0,
                mFgBitmap.getWidth(), mFgBitmap.getHeight(), mFgMatrix, true);
    }
}

PopupWindow的布局popwindow.xml 
注意3个LinearLayout里必须设置clickable和background,这样当点击上去的时候才会有点击效果。 
android:clickable="true" 
android:background="@drawable/state_btn_pressed"

<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/layout_main"
        >
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center_horizontal"
            android:clickable="true"
            android:background="@drawable/state_btn_pressed"
            android:layout_weight="1"
            android:id="@+id/btn_0"
            >
            <ImageView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_call"
                >
            </ImageView>
            <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000000"
                android:textSize="18px"
                android:text="电话">
            </TextView>
        </LinearLayout>
        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center_horizontal"
            android:clickable="true"
            android:background="@drawable/state_btn_pressed"
            android:layout_weight="1"
            android:id="@+id/btn_1"
            >
            <ImageView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_home"
                >
            </ImageView>
            <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000"
                android:textSize="18px"
                android:text="空间">
            </TextView>
        </LinearLayout>  

        <LinearLayout android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center_horizontal"
            android:clickable="true"
            android:background="@drawable/state_btn_pressed"
            android:layout_weight="1"
            android:id="@+id/btn_2"
            >
            <ImageView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:scaleType="fitCenter"
                android:src="@drawable/ic_sms"
                >
            </ImageView>
            <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="#000"
                android:textSize="18px"
                android:text="短信"
                >
            </TextView>
        </LinearLayout>
</LinearLayout>
state_btn_pressed.xml,点击的效果: 
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@drawable/bg_btn_pressed"
        android:padding="0dp"/>
</selector>  

Android 模仿迅雷的 PopupWindow 出现/消失动画 
出现:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="0.6" android:toXScale="1.1"
        android:fromYScale="0.6" android:toYScale="1.1" android:pivotX="50%"
        android:pivotY="50%" android:duration="200" />
    <scale android:fromXScale="1.0" android:toXScale="0.91"
        android:fromYScale="1.0" android:toYScale="0.91" android:pivotX="50%"
        android:pivotY="50%" android:duration="400" android:delay="200" />
    <alpha android:interpolator="@android:anim/linear_interpolator"
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="400" />
</set>  

消失:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale android:fromXScale="1.0" android:toXScale="1.25"
        android:fromYScale="1.0" android:toYScale="1.25" android:pivotX="50%"
        android:pivotY="50%" android:duration="200" />
    <scale android:fromXScale="1.0" android:toXScale="0.48"
        android:fromYScale="1.0" android:toYScale="0.48" android:pivotX="50%"
        android:pivotY="50%" android:duration="400" android:delay="200" />
    <alpha android:interpolator="@android:anim/linear_interpolator"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="400" />
</set>  

最后用下面的 XML 封装:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="PopupAnimation" parent="android:Animation"
        mce_bogus="1">
        <item name="android:windowEnterAnimation">@anim/anim_dialog_show</item>
        <item name="android:windowExitAnimation">@anim/anim_dialog_hide</item>
    </style>
</resources>  

DraweRoll.rar

 
时间: 2024-08-26 00:36:04

Android 自定义PopupWindow动画效果的相关文章

自定义PopupWindow动画效果

Java代码   public class RollActivity extends Activity { private View view; private Button btn; private PopupWindow mPopupWindow; private View[] btns; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceS

Android自定义类似ProgressDialog效果的Dialog

Android自定义类似ProgressDialog效果的Dialog. 方法如下: 1.首先准备两张自己要定义成哪样子的效果的图片和背景图片(也可以不要背景). 如我要的效果: 2.定义loading_dialog.xml布局文件(这里你也可以按自己的布局效果定义,关键是要有个imageView): [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <LinearLayout

Android开发之动画效果浅析

Android开发之动画效果浅析 请尊重他人的劳动成果,转载请注明出处:Android开发之动画效果浅析 程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animation.下面依次介绍一下各个动画. 1.   补间动画(Tween) Tween动画,通过对View 的内容进行一系列的图形变换 (包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果的定义可

android Activity切换动画效果

为Activity设置左右进出的效果,可以通过在Mainfest.xml文件中设置主题的方式来实现.还可以使用java代码. 一.设置样式 先看看实现动画的样式: <style name="AnimationRToL" mce_bogus="1" parent="@<span style="color:#ff0000;">android:style/Animation.Activity</span>&quo

Android自定义Transition动画

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 曾经(或者现在)很多人说起Android和iOS都会拿Android的UI设计来开黑, "你看看人家iOS的设计, 再来看看Android的, 差距怎么就这么大呢?", 对于这种说辞, 可以一句话来总结一下"他们还停留在4.X之前的时代". 自从Android5.0推出Material Design设计规范后, Android在设计上早已甩那个万年不变的iOS好几十条街! 以上纯

Android 自定义PopupWindow以及参数传递与返回

在这篇博客之前,还写了一篇关于PopupWindow,那篇主要是关于PopupWindow弹出位置的设置.以及选择PopupWindow布局后的监听.详情看Android popupwindow 示例程序一.接下来这篇主要是讲自定义PopupWindow以及参数传递与返回,我在里面写了一个listview来示例.接下来看代码,都有所注释. 本文项目资源下载: 一.MainActivity <span style="background-color: rgb(240, 240, 240);&

自定义ModalViewController 动画效果

iOS 7 自定义ViewController动画切换 自定义动画切换的相关的主要API 在深入之前,我们先来看看新SDK中有关这部分内容的相关接口以及它们的关系和典型用法.这几个接口和类的名字都比较相似,但是还是能比较好的描述出各自的职能的,一开始的话可能比较迷惑,但是当自己动手实现一两个例子之后,它们之间的关系就会逐渐明晰起来.(相关的内容都定义在UIKit的UIViewControllerTransitioning.h中了) @protocol UIViewControllerContex

Android学习——Animation动画效果

1.Android动画模式: 1>tweened animation: 渐变动画: 2>frame by frame: 画面转换动画. 2.Android的Animation动画由四种类型组成: XML alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 Java代码 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimat

Android animator Animation动画效果详解

Android的animation由四种类型组成 XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 Android动画模式 Animation主要有两种