Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android一個彈出菜單的動畫(一)

android一個彈出菜單的動畫(一)

編輯:關於Android編程

先上效果圖:

\

 

 

先寫Layout文件:

 




    
        
   
   
   
    
   
    
   

這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);



 

點擊按鈕時候,按鈕本身會旋轉:

 



用以下方法得到球的最終位置: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

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved