Android 自定义PopupWindow动画效果_第1张图片

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(){@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowPopupWindow(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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//doSomething}});btns[1].setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub//doSomething}});btns[2].setOnClickListener(new OnClickListener() {@Overridepublic 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 (111 KB)

更多相关文章

  1. Android 导航条效果实现(三) ViewPager+PagerTabStrip
  2. android tv 实现颜色条滚动效果
  3. 个性进度条--------菊花加载----Android 播放动画
  4. Android 属性动画详解
  5. android 自定义view 类似loadding从下往上加载的动画
  6. android 使用动画 Button移动后不响应点击事件的解决办法
  7. android仿照ipone的弹性效果
  8. android RadioButton 点击时候出现点击声音的效果
  9. android实现SharedPreferences的存入与取出的现实效果

随机推荐

  1. android评分条RatingBar自定义设置
  2. Android(安卓)屏幕截图 代码
  3. android截屏
  4. Android(安卓)网络图片查看器
  5. android Pull解析xml 使用小结
  6. Android(安卓)开发常用代码片段
  7. Android(安卓)源代码在线阅读
  8. Android沉浸式状态栏
  9. [置顶] 【Android(安卓)Notes】置顶索引
  10. Intent在Android中的几种用法