Android 폭발 메뉴 버튼 팝 업 효과 구현
실현 원 리 는 매우 간단 하 다.바로 안 드 로 이 드 어 쿠 스틱 애니메이션 효 과 를 이용 하여 중심 단 추 를 눌 렀 을 때 나머지 단 추 를 꺼 내 는 것 이다.잡담 은 그만 하고 코드 는 아래 와 같다.
STEP 1:activitymain.xml 는 간단 합 니 다.즉,같은 위치 에 있 는 다섯 개의 버튼 입 니 다.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:src="@drawable/im"
android:background="@android:color/transparent"/>
<ImageButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:visibility="invisible"
android:src="@drawable/i"
android:background="@android:color/transparent"/>
<ImageButton
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:src="@drawable/ii"
android:visibility="invisible"
android:background="@android:color/transparent"/>
<ImageButton
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:src="@drawable/iii"
android:visibility="invisible"
android:background="@android:color/transparent"/>
<ImageButton
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="10dp"
android:src="@drawable/iiii"
android:visibility="invisible"
android:background="@android:color/transparent" />
</RelativeLayout>
STEP 2:MainActivity
package com.example.boombuttons;
import java.util.ArrayList;
public class MainActivity extends Activity implements OnClickListener{
//
private ImageButton button;
//
private ImageButton button1;
private ImageButton button2;
private ImageButton button3;
private ImageButton button4;
//
private List<ImageButton> buttonItems = new ArrayList<ImageButton>(3);
// ,1 ,-1
private int flag = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
button = (ImageButton)findViewById(R.id.button);
button.setOnClickListener(this);
button1 = (ImageButton)findViewById(R.id.button1);
button2 = (ImageButton)findViewById(R.id.button2);
button3 = (ImageButton)findViewById(R.id.button3);
button4 = (ImageButton)findViewById(R.id.button4);
//
buttonItems.add(button1);
buttonItems.add(button2);
buttonItems.add(button3);
buttonItems.add(button4);
}
/**
*
* @params
* @params radius
*/
public void buttonAnimation(List<ImageButton> buttonList,int radius){
for(int i=0;i<buttonList.size();i++){
ObjectAnimator objAnimatorX;
ObjectAnimator objAnimatorY;
ObjectAnimator objAnimatorRotate;
//
buttonList.get(i).setVisibility(View.VISIBLE);
// X、Y
float distanceX = (float) (flag*radius*(Math.cos(Util.getAngle(buttonList.size(),i))));
float distanceY = -(float) (flag*radius*(Math.sin(Util.getAngle(buttonList.size(),i))));
// X
objAnimatorX = ObjectAnimator.ofFloat(buttonList.get(i), "x", buttonList.get(i).getX(),buttonList.get(i).getX()+distanceX);
objAnimatorX.setDuration(200);
objAnimatorX.setStartDelay(100);
objAnimatorX.start();
// Y
objAnimatorY = ObjectAnimator.ofFloat(buttonList.get(i), "y", buttonList.get(i).getY(),buttonList.get(i).getY()+distanceY);
objAnimatorY.setDuration(200);
objAnimatorY.setStartDelay(100);
objAnimatorY.start();
//
objAnimatorRotate = ObjectAnimator.ofFloat(buttonList.get(i), "rotation", 0, 360);
objAnimatorRotate.setDuration(200);
objAnimatorY.setStartDelay(100);
objAnimatorRotate.start();
if(flag==-1){
objAnimatorX.addListener(new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animator animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animator animation) {
// TODO Auto-generated method stub
//
for (int i = 0; i < buttonItems.size(); i++) {
buttonItems.get(i).setVisibility(View.INVISIBLE);
}
}
@Override
public void onAnimationCancel(Animator animation) {
// TODO Auto-generated method stub
}
});
}
}
}
}
세 번 째 단계:Util.java 도구 클래스 는 단추 개수 와 단 추 를 통 해 목록 에 있 는 색인 을 통 해 팝 업 각 도 를 계산 하 는 정적 방법 을 썼 습 니 다.
public class Util {
/**
* ( )
* @param index
* @return double ( )
*/
public static double getAngle(int total,int index){
return Math.toRadians(90/(total-1)*index+90);
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.