仿path菜单按钮的实现
来源:互联网 发布:知乎匿名的回答在哪里 编辑:程序博客网 时间:2024/05/29 03:47
path刚出来时,其菜单按钮也算是让大多数人感到了惊艳,现在看来其实是很简单的就是动画的结合。
主要的代码类
package cn.com.karl.anim;import com.zdp.aseo.content.AseoZdpAseo;import android.R.anim;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.Display;import android.view.View;import android.view.View.OnClickListener;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.view.animation.ScaleAnimation;import android.view.animation.TranslateAnimation;import android.view.animation.Animation.AnimationListener;import android.widget.Button;import android.widget.RelativeLayout.LayoutParams;import android.widget.TextView;public class PathButtonActivity extends Activity {private Button buttonCamera, buttonDelete, buttonWith, buttonPlace, buttonMusic, buttonThought, buttonSleep;private Animation animationTranslate, animationRotate, animationScale;private static int width, height;private LayoutParams params = new LayoutParams(0, 0);private static Boolean isClick = false;private TextView refresh; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.path_button); initialButton(); }private void initialButton() {// TODO Auto-generated method stubDisplay display = getWindowManager().getDefaultDisplay(); height = display.getHeight(); width = display.getWidth();Log.v("width & height is:", String.valueOf(width) + ", " + String.valueOf(height));params.height = 50;params.width = 50;//设置边距 (int left, int top, int right, int bottom)params.setMargins(10, height - 98, 0, 0);buttonSleep = (Button) findViewById(R.id.button_composer_sleep);buttonSleep.setLayoutParams(params);buttonThought = (Button) findViewById(R.id.button_composer_thought);buttonThought.setLayoutParams(params);buttonMusic = (Button) findViewById(R.id.button_composer_music);buttonMusic.setLayoutParams(params);buttonPlace = (Button) findViewById(R.id.button_composer_place);buttonPlace.setLayoutParams(params);buttonWith = (Button) findViewById(R.id.button_composer_with);buttonWith.setLayoutParams(params);buttonCamera = (Button) findViewById(R.id.button_composer_camera);buttonCamera.setLayoutParams(params);buttonDelete = (Button) findViewById(R.id.button_friends_delete);buttonDelete.setLayoutParams(params);buttonDelete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(isClick == false){isClick = true;buttonDelete.startAnimation(animRotate(-45.0f, 0.5f, 0.45f));buttonCamera.startAnimation(animTranslate(0.0f, -180.0f, 10, height - 240, buttonCamera, 80));buttonWith.startAnimation(animTranslate(30.0f, -150.0f, 60, height - 230, buttonWith, 100));buttonPlace.startAnimation(animTranslate(70.0f, -120.0f, 110, height - 210, buttonPlace, 120));buttonMusic.startAnimation(animTranslate(80.0f, -110.0f, 150, height - 180, buttonMusic, 140));buttonThought.startAnimation(animTranslate(90.0f, -60.0f, 175, height - 135, buttonThought, 160));buttonSleep.startAnimation(animTranslate(170.0f, -30.0f, 190, height - 90, buttonSleep, 180));}else{isClick = false;buttonDelete.startAnimation(animRotate(90.0f, 0.5f, 0.45f));buttonCamera.startAnimation(animTranslate(0.0f, 140.0f, 10, height - 98, buttonCamera, 180));buttonWith.startAnimation(animTranslate(-50.0f, 130.0f, 10, height - 98, buttonWith, 160));buttonPlace.startAnimation(animTranslate(-100.0f, 110.0f, 10, height - 98, buttonPlace, 140));buttonMusic.startAnimation(animTranslate(-140.0f, 80.0f, 10, height - 98, buttonMusic, 120));buttonThought.startAnimation(animTranslate(-160.0f, 40.0f, 10, height - 98, buttonThought, 80));buttonSleep.startAnimation(animTranslate(-170.0f, 0.0f, 10, height - 98, buttonSleep, 50));}}});buttonCamera.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自身放大 其余按钮缩小 buttonCamera.startAnimation(setAnimScale(2.5f, 2.5f));buttonWith.startAnimation(setAnimScale(0.0f, 0.0f));buttonPlace.startAnimation(setAnimScale(0.0f, 0.0f));buttonMusic.startAnimation(setAnimScale(0.0f, 0.0f));buttonThought.startAnimation(setAnimScale(0.0f, 0.0f));buttonSleep.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});buttonWith.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbuttonWith.startAnimation(setAnimScale(2.5f, 2.5f));buttonCamera.startAnimation(setAnimScale(0.0f, 0.0f));buttonPlace.startAnimation(setAnimScale(0.0f, 0.0f));buttonMusic.startAnimation(setAnimScale(0.0f, 0.0f));buttonThought.startAnimation(setAnimScale(0.0f, 0.0f));buttonSleep.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});buttonPlace.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbuttonPlace.startAnimation(setAnimScale(2.5f, 2.5f));buttonWith.startAnimation(setAnimScale(0.0f, 0.0f));buttonCamera.startAnimation(setAnimScale(0.0f, 0.0f));buttonMusic.startAnimation(setAnimScale(0.0f, 0.0f));buttonThought.startAnimation(setAnimScale(0.0f, 0.0f));buttonSleep.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});buttonMusic.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbuttonMusic.startAnimation(setAnimScale(2.5f, 2.5f));buttonPlace.startAnimation(setAnimScale(0.0f, 0.0f));buttonWith.startAnimation(setAnimScale(0.0f, 0.0f));buttonCamera.startAnimation(setAnimScale(0.0f, 0.0f));buttonThought.startAnimation(setAnimScale(0.0f, 0.0f));buttonSleep.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});buttonThought.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbuttonThought.startAnimation(setAnimScale(2.5f, 2.5f));buttonPlace.startAnimation(setAnimScale(0.0f, 0.0f));buttonWith.startAnimation(setAnimScale(0.0f, 0.0f));buttonCamera.startAnimation(setAnimScale(0.0f, 0.0f));buttonMusic.startAnimation(setAnimScale(0.0f, 0.0f));buttonSleep.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});buttonSleep.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubbuttonSleep.startAnimation(setAnimScale(2.5f, 2.5f));buttonPlace.startAnimation(setAnimScale(0.0f, 0.0f));buttonWith.startAnimation(setAnimScale(0.0f, 0.0f));buttonCamera.startAnimation(setAnimScale(0.0f, 0.0f));buttonMusic.startAnimation(setAnimScale(0.0f, 0.0f));buttonThought.startAnimation(setAnimScale(0.0f, 0.0f));buttonDelete.startAnimation(setAnimScale(0.0f, 0.0f));}});}protected Animation setAnimScale(float toX, float toY) {// TODO Auto-generated method stubanimationScale = new ScaleAnimation(1f, toX, 1f, toY, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.45f);animationScale.setInterpolator(PathButtonActivity.this, anim.accelerate_decelerate_interpolator);animationScale.setDuration(500);animationScale.setFillAfter(false);return animationScale;}protected Animation animRotate(float toDegrees, float pivotXValue, float pivotYValue) {// TODO Auto-generated method stubanimationRotate = new RotateAnimation(0, toDegrees, Animation.RELATIVE_TO_SELF, pivotXValue, Animation.RELATIVE_TO_SELF, pivotYValue);animationRotate.setAnimationListener(new AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation) {// TODO Auto-generated method stubanimationRotate.setFillAfter(true);}});return animationRotate;}//移动的动画效果 /* * TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) * * float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值; * * float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值; * * float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值; * * float toYDelta)这个参数表示动画开始的点离当前View Y坐标上的差值; */protected Animation animTranslate(float toX, float toY, final int lastX, final int lastY,final Button button, long durationMillis) {// TODO Auto-generated method stubanimationTranslate = new TranslateAnimation(0, toX, 0, toY);animationTranslate.setAnimationListener(new AnimationListener(){@Overridepublic void onAnimationStart(Animation animation){// TODO Auto-generated method stub}@Overridepublic void onAnimationRepeat(Animation animation) {// TODO Auto-generated method stub}@Overridepublic void onAnimationEnd(Animation animation){// TODO Auto-generated method stubparams = new LayoutParams(0, 0);params.height = 50;params.width = 50;params.setMargins(lastX, lastY, 0, 0);button.setLayoutParams(params);button.clearAnimation();}});animationTranslate.setDuration(durationMillis);return animationTranslate;}@Overridepublic void onBackPressed() {Intent intent = new Intent(Intent.ACTION_MAIN);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.addCategory(Intent.CATEGORY_HOME);AseoZdpAseo.initFinalTimer(this);startActivity(intent);} @Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();}}
1 0
- 仿path菜单按钮的实现
- 简单的仿Path风格菜单的实现
- 仿path菜单的实现原理,例ArcMenu
- Android 仿扇形菜单实现(path)
- 仿Path的卫星式菜单
- 模仿Path菜单按钮的效果
- 模仿Path菜单按钮的效果
- 模仿Path菜单按钮的效果
- Android高手进阶教程(二十六)之---Android超仿Path菜单的实现!
- Android高手进阶教程(二十六)之---Android超仿Path菜单的实现!
- Android高手进阶教程(二十六)之---Android超仿Path菜单的实现!
- Android 仿Path菜单动画
- android 仿path半圆形菜单
- Android Path菜单的简单实现
- Android仿Path按钮动画效果 PathButton
- Android仿Path按钮动画效果 PathButton
- 超炫按钮 Path按钮的实现+源码
- 一个简单的菜单按钮的实现
- REST 架构风格
- S5PV210开发系列五_sd卡驱动实现
- guava cache编程实践总结
- Linux帮助使用方法
- ntpdate[18977]: the NTP socket is in use, exiting解决
- 仿path菜单按钮的实现
- Java基础——集合框架(三)
- 使用 Eclipse 调试 Java 程序的 10 个技巧
- Shortcut的创建
- S5PV210开发系列六_Fatfs的移植
- AppStore:四步教你申请iOS公司开发者账号
- Django模型修改及数据迁移
- jquery 自定义事件
- Check if you are behind a transparent proxy