Android 사용자 정의 애니메이션 보기 흔 들 림 효과 구현
코드 는 매우 간단 해서 직접 소스 코드 에 들어간다.
activity_maini.xml 레이아웃 파일:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:gravity="center"
android:orientation="vertical">
<!-- -->
<ImageView
android:id="@+id/iv_dial"
android:layout_width="200dp"
android:layout_height="200dp"
android:src="@drawable/img"/>
<!-- -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btn_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "/>
<Button
android:id="@+id/btn_end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" "/>
</LinearLayout>
</LinearLayout>
ImageView 를 다른 View 컨트롤 로 대체 할 수도 있 고 흔 들 림 효 과 를 실현 할 수 있 습 니 다.메 인 인터페이스 MainActivity
/**
*
* Created by zhuwentao on 2016-08-08.
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
/** */
private ImageView mDialIv;
/** */
private Button mStartBtn;
/** */
private Button mEndBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initListener();
}
/**
* UI
*/
private void initUI() {
mDialIv = (ImageView) findViewById(R.id.iv_dial);
mStartBtn = (Button) findViewById(R.id.btn_start);
mEndBtn = (Button) findViewById(R.id.btn_end);
}
/**
*
*/
private void initListener() {
mStartBtn.setOnClickListener(this);
mEndBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_start:
showAnimation();
break;
case R.id.btn_end:
mDialIv.clearAnimation();
break;
}
}
/**
*
*/
private void showAnimation() {
//
CustomRotateAnim rotateAnim = CustomRotateAnim.getCustomRotateAnim();
// 1
rotateAnim.setDuration(1000);
//
rotateAnim.setRepeatCount(-1);
//
rotateAnim.setInterpolator(new LinearInterpolator());
//
mDialIv.startAnimation(rotateAnim);
}
}
setRepeatCount()는 애니메이션 을 반복 재생 하 는 횟수 를 설정 합 니 다.-1 은 반복 재생 을 위해 서 입 니 다.setRepeatCount(0)는 한 번 실행 하 는 것 을 의미 하고 setRepeatCount(1)는 한 번 반복 하 는 것 을 의미 합 니 다.즉,애니메이션 이 두 번 실 행 됩 니 다.setInterpolator()방법 은 플러그 인 을 설정 하여 애니메이션 의 효 과 를 지정 하 는 것 입 니 다.시스템 이 제공 하 는 Linear Interpolator()의 등 속 변화 효 과 를 사용 합 니 다.
사용자 정의 Custom RotateAnim 애니메이션 은 Animation 을 계승 해 야 합 니 다.initialize()와 apply Transformation()방법 만 실현 하면 됩 니 다.
/**
*
* Created by zhuwentao on 2016-08-08.
*/
public class CustomRotateAnim extends Animation {
/** */
private int mWidth;
/** */
private int mHeight;
/** */
private static CustomRotateAnim rotateAnim;
/**
*
* @return
*/
public static CustomRotateAnim getCustomRotateAnim() {
if (null == rotateAnim) {
rotateAnim = new CustomRotateAnim();
}
return rotateAnim;
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
this.mWidth = width;
this.mHeight = height;
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
//
t.getMatrix().setRotate((float)(Math.sin(interpolatedTime*Math.PI*2)*50), mWidth/2, mHeight/2);
super.applyTransformation(interpolatedTime, t);
}
}
initialize(int width,int height,int parentWidth,int parentHeight)에서 width 와 height 는 애니메이션 을 재생 할 수 있 는 View 공간 이 넓 고 parentWidth 와 parentHeight 는 이 View 컨트롤 이 있 는 부모 컨트롤 의 너비 가 높다 는 것 을 의미 합 니 다.현재 View 의 너비 와 높이 를 사용 하여 흔 들 리 는 회전 점 을 확인 해 야 하기 때문에 initialize 에서 View 컨트롤 의 너비 와 높이 를 가 져 옵 니 다.
apply Transformation()방법 은 애니메이션 의 구체 적 인 실현 방법 입 니 다.시스템 에서 애니메이션 을 그 릴 때 이 방법 을 반복 적 으로 호출 합 니 다.apply Transformation()방법 을 호출 할 때마다 그 중의 interpolated Time 매개 변 수 는 한 번 바 뀌 고 값 은 0 에서 1 로 증가 하 며 interpolated Time 의 값 이 1 일 때 애니메이션 이 끝 납 니 다.
Transformatio 류 는 변 환 된 행렬 로 이 행렬 을 바 꾸 면 각종 복잡 한 효 과 를 실현 할 수 있다.
이 방법 을 복사 하면 안에서 사용자 정의 애니메이션 효 과 를 실현 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.