zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    正则表达式的贪婪匹配(.*)和非贪婪匹配(.*?)
    jQuery + css 公告从左往右滚动
    C# process 使用方法
    存储过程与SQL的结合使用
    img标签的方方面面
    kibana 5.0.0-alpha5 安装
    es5.0 v5.0.0-alpha 编译安装
    奇怪的hosts文件
    阿里云 api 的文档拼写错误
    centos 7 systemd docker http proxy
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5404353.html
Copyright © 2011-2022 走看看