首页 > 其他分享 >自定义PopupWindow动画效果

自定义PopupWindow动画效果

时间:2023-05-01 14:05:16浏览次数:52  
标签:PopupWindow btns 自定义 动画 mPopupWindow View new btn view




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>



  • 自定义PopupWindow动画效果_android

  • 大小: 22.1 KB
  • DraweRoll.rar (111 KB)
  • 下载次数: 981
  • 查看图片附件

标签:PopupWindow,btns,自定义,动画,mPopupWindow,View,new,btn,view
From: https://blog.51cto.com/u_5454003/6238864

相关文章

  • 简单位移动画TranslateAnimation
    已不再推荐补间动画,请使用属性动画;动画中的View的点击判断Android动画框架详解http://www.ibm.com/developerworks/cn/opensource/os-cn-android-anmt1/index.html每次点击往前100或往后100.packagecom.ql.app;importandroid.app.Activity;importa......
  • Activity切换动画效果的修改
    Activity的动画效果在\android\frameworks\base\core\res\res\values下的stlyes.xml,themes.xml两个文件中有定义。但是有时这些效果未必能满足你的要求,需要自己定义styles.xml来实现这个功能。Activity去掉默认的动画效果方法:1.重写Activity的Them中的......
  • Android提高第十八篇之自定义PopupWindow实现的Menu(TabMenu)
    用过UCWEB-Android版的人都应该对其特殊的menu有印象,把menu做成Tab-Menu(支持分页的Menu),可以容纳比Android传统的menu更丰富的内容(Android的menu超过6项则缩略在[更多]里),本文参考网上的例子(作者:CoffeeCole,email:[email protected]),对例子进行简化以及封装,使其作为一个复......
  • Android Activity界面切换添加动画特效
    在Android2.0之后有了overridePendingTransition(),其中里面两个参数,一个是前一个activity的退出两一个activity的进入。@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentVi......
  • 【web 开发基础】PHP自定义回调函数之call_user_func_array()
    前言从上一篇文章中我们了解到,回调函数是将一个函数作为参数传递到调用的函数中。如果在函数的格式说明中出现callback类型的参数,则该函数就是回调函数。虽然可以使用变量函数去声明自己的回调函数,不过我们通常大多还是会通过借助 call_user_func_array() 函数去实现。通过借助......
  • 自定义快捷键
    问题:复制粘贴的快捷键是CtrlC和CtrlV,在现实中粘贴值到可见单元格的用处更大,如何将这一功能自定义成快捷键?解决:【文件】》【选项】》【自定义功能区】 输入命令“粘贴值”,点击【请按新快捷键】,依次按下指定的快捷键(假设为Ctrl+Shift+V),点击【指定】 据此法,可以自定义任意命......
  • Android播放GIF动画
    "quality="high"type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer">1.<ImageViewandroid:id="@+id/gifpicture"2.android:layout_width="fill_parent&quo......
  • Activity之间的切换动画
    从android系统2.1以后,android新增了方法:overridePendingTransition(intenterAnim,intexitAnim),用于改变Activity之间的切换动画。从样式里进行改变切换动画这个主要是加在样式文件里进行更改,代码如下:Xml代码 1.<</span>stylename="Theme.Test"parent="......
  • Excel 使用VBA 自定义函数
     启用Excel开发工具    打开Excel的VBA(ALT+F11)   新键VBA工程模块写入自定义函数FunctionHexIPAddr(strIPAddrAsString,isAscAsBoolean)AsStringDimarry,bit0AsString,bit1AsString,bit2AsString,bit3As......
  • 记录一下MAX在动画制作中遇到文件大小无限膨胀的BUG
    最新在用MAX的biped骨骼做动画,一个简单的角色动画,用到了运动混合器,随着项目的推进,诡异的事情开始出现,文件变得无比庞大,但文件内都是链接,模型面数也不到1w,但文件大小却膨胀到了300多MB这使得打开和保存变得无比慢,但是用首选项里的“压缩保存的文件”选项却可以把工程文件压缩到4MB......