android一个弹出菜单的动画(一)

先上效果图:

先写Layout文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@android:color/white">

   <ImageView
        android:id="@+id/sat_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/sat_main"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="5dp"
        /> 

   <ImageView
    android:id="@+id/sat_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    />

    <ImageView
    android:id="@+id/clone_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    />

</RelativeLayout>

这3个ImageView都在屏幕的底部,clone_item需要固定在球弹起的最高位置:

初始化这3个imageView:

  sat_main = (ImageView)findViewById(R.id.sat_main);
		final ImageView itemView = (ImageView)findViewById(R.id.sat_item);
		final ImageView cloneView = (ImageView)findViewById(R.id.clone_item);
		cloneView.setImageResource(R.drawable.searchable_web);
		itemView.setImageResource(R.drawable.searchable_web);
		itemView.setVisibility(View.GONE);

初始化cloneView的位置:

//这个是使cloneview固定在leftmargin x bottomMargin y的地方
		RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams) cloneView.getLayoutParams();
		layoutParams.bottomMargin = Math.abs(y);
		layoutParams.leftMargin = Math.abs(x);
		cloneView.setLayoutParams(layoutParams);

点击按钮时候,按钮本身会旋转:

<?xml version="1.0" encoding="utf-8"?>
<rotate	xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator"
	android:fromDegrees="0"
	android:toDegrees="-135"
	android:pivotX="50%"
	android:pivotY="50%"
	android:duration="300"
	android:fillAfter="true"
	android:fillEnabled="true"/>

用以下方法得到球的最终位置:x坐标是distance*cos(角度),y是distance*sin(角度)

	//取得distance的cos(degree)
	public static int getTranslateX(float degree, int distance) {
		return Double.valueOf(distance * Math.cos(Math.toRadians(degree))).intValue();
	}

	public static int getTranslateY(float degree, int distance){
        return Double.valueOf(-1 * distance * Math.sin(Math.toRadians(degree))).intValue();
    }
	 

然后球弹起的动画:

	public static Animation createItemOutAnimation(Context context, int index, long expandDuration, int x, int y){

        AlphaAnimation alphaAnimation = new AlphaAnimation(0f, 1f);
        long alphaDuration = 60;
        if(expandDuration < 60){
        	alphaDuration = expandDuration / 4;
        }
        alphaAnimation.setDuration(alphaDuration);
        alphaAnimation.setStartOffset(0);

        //x和y是球弹到最高点的坐标
        TranslateAnimation translate = new TranslateAnimation(0, x, 0, y);

        translate.setStartOffset(0);
        translate.setDuration(expandDuration);
        //OvershootInterpolator:表示向前甩一定值后再回到原来位置。
        translate.setInterpolator(context, R.anim.sat_item_overshoot_interpolator);

        RotateAnimation rotate = new RotateAnimation(0f, 360f,
                Animation.RELATIVE_TO_SELF, 0.5f,
                Animation.RELATIVE_TO_SELF, 0.5f);

        //AccelerateInterpolator:动画从开始到结束,变化率是一个加速的过程。
        //DecelerateInterpolator:动画从开始到结束,变化率是一个减速的过程
        rotate.setInterpolator(context, R.anim.sat_item_out_rotate_interpolator);

        long duration = 100;
        if(expandDuration <= 150){
            duration = expandDuration / 3;
        }

        rotate.setDuration(expandDuration-duration);
        rotate.setStartOffset(duration);        

        AnimationSet animationSet = new AnimationSet(false);
        animationSet.setFillAfter(false);
        animationSet.setFillBefore(true);
        animationSet.setFillEnabled(true);

        animationSet.addAnimation(alphaAnimation);
        animationSet.addAnimation(rotate);
        animationSet.addAnimation(translate);

        animationSet.setStartOffset(30*index);

        return animationSet;
    }

这个动画弹到最高点后,我们得使itemview gone掉,cloneview visible

代码的位置:http://download.csdn.net/detail/baidu_nod/7722621

android一个弹出菜单的动画(一)

时间: 2024-10-05 03:26:03

android一个弹出菜单的动画(一)的相关文章

android一个弹出菜单的动画(二)

假设做一个弹出的控件,我们能够进行加入view: 写class SatelliteMenu extends FrameLayout private void init(Context context, AttributeSet attrs, int defStyle) { inflate(context, R.layout.sat_main, this); imgMain = (ImageView) findViewById(R.id.sat_main); if(attrs != null){

自己写了一个弹出菜单,有间隙也可以

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

ArcGIS Pro自己做一个弹出菜单

public void ShowCustomPopup() { //Get the active map view. var mapView = MapView.Active; if (mapView == null) return; //Create custom popup content var popups = new List<PopupContent>(); popups.Add(new PopupContent("<b>This text is bold.&

获得其他程序弹出菜单的内容(一个困扰许久的问题o(╯□╰)o)

刚开始到现在公司的时候接到一个任务:开发一个activex控件,自动操作本地exe程序,当时遇到弹出菜单无法获取的问题,还好不影响,最近又遇到这个问题,绕不过去了,于是昨天花了一个上午百度了个遍,总算解决了...网上也有人遇到类似的问题,但是都没人给出一个完整解决方案来,所以记录下来,以备后用. 核心代码:windows系统其实只有一个弹出菜单,类型为#32768,但是FindWindow获取的是窗口句柄,需要发送MN_GETHMENU 0x01E1消息转换成菜单句柄,然后通过菜单的API进行其

Android学习笔记之PopupMenu弹出菜单

(1)布局文件:用于弹出菜单的处罚button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_paren

MUI组件三:列表、遮罩蒙版、数字输入框、侧滑导航和弹出菜单

1.list(列表) 列表是常用的UI控件,mui封装的列表组件比较简单,只需要在ul节点上添加.mui-table-view类.在li节点上添加.mui-table-view-cell类即可,如下为示例代码 <ul class="mui-table-view"> <li class="mui-table-view-cell">Item 1</li> <li class="mui-table-view-cell&q

IOS实现弹出菜单效果MenuViewController(背景 景深 弹出菜单)

在写项目时,要实现一个从下移上来的一个弹出菜单,并且背景变深的这么一个效果,在此分享给大家. 主要说一下思路及一些核心代码贴出来,要想下载源码, 请到:http://download.csdn.net/download/rhljiayou/6280989 一个简单,效果好,比较实用的菜单弹出效果的实现,效果图: 实现方式:将self.view当前页面缩小,在当前页的上面添加一个菜单的view,即在self.view.superview添加. [cpp] view plaincopy //显示 -

关于MFC主菜单和右键弹出菜单

一.主菜单.弹出菜单和右键菜单的概念: 主菜单是窗口顶部的菜单,一个窗口或对话框只能有一个主菜单,但是主菜单可以被更改(SetMenu()更改): 创建方式:CMenu::CreateMenu(void); 弹出菜单在菜单项中是带有右向小三角的菜单,主菜单的每个菜单项都是一个弹出菜单(PopMenu),因此弹出菜单是凸型或左凸型: 创建方式:CMenu::CreatePopMenu(void); 右键菜单是点击右键弹出的菜单(响应OnContextMenu). 原文地址:https://www.

[Android] 底部菜单布局+PopupWindows实现弹出菜单功能(初级篇)

    这篇文章主要是自己研究如何对底部菜单进行布局,并简单的实现点击不同"按钮"实现图片切换和背景切换的功能,最后通过PopupWindows实现弹出菜单,点击不同按钮能实现不同方法,相当于美图秀秀编辑图片的功能吧!它并没有涉及到Fragment碎片切换页面的功能,因为页面始终显示被处理的图片.这是我初学Android的一篇基础性文章和在线思想笔记,网上有很多更优秀的demo,不过也希望对大家有用~ 首先介绍两种方法实现底部菜单点击不同图标显示选中状态的效果. (可参考简短文章:An