안 드 로 이 드 물결 확산 효과 구현 인 스 턴 스 코드
프로젝트
1.효과 도:
2.사용 방법:
xml 에서 RippleImageView 사용자 정의 컨트롤 사용 하기:
xmlns:app="http://schemas.android.com/apk/res-auto"
<com.army.rippleimage.RippleImageView
android:id="@+id/rippleImageView"
android:layout_width="match_parent"
android:layout_height="180dp"
android:background="#37B158"
app:show_spacing_time="800"//
app:imageViewWidth="35dp"//
app:imageViewHeigth="35dp"
android:layout_centerHorizontal="true">
</com.army.rippleimage.RippleImageView>
Activity 에서 의 사용:
rippleImageView=(RippleImageView)findViewById(R.id.rippleImageView);
//
rippleImageView.startWaveAnimation();
//
rippleImageView.stopWaveAnimation();
3.사용자 정의 컨트롤 을 항목 에 도입 하 는 방법:사용자 정의 컨트롤 복사 RippleImageView
/**
* Description :
* Author : liujun
* Email : [email protected]
*/
public class RippleImageView extends RelativeLayout {
private static final int SHOW_SPACING_TIME=700;
private static final int MSG_WAVE2_ANIMATION = 1;
private static final int MSG_WAVE3_ANIMATION = 2;
private static final int IMAMGEVIEW_SIZE = 80;
/** */
private static final int SIZE =3 ;
/** */
private int show_spacing_time=SHOW_SPACING_TIME;
/** */
private AnimationSet [] mAnimationSet=new AnimationSet[SIZE];
/** */
private ImageView [] imgs=new ImageView[SIZE];
/** */
private ImageView img_bg;
/** */
private float imageViewWidth=IMAMGEVIEW_SIZE;
private float imageViewHeigth=IMAMGEVIEW_SIZE;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_WAVE2_ANIMATION:
imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE2_ANIMATION]);
break;
case MSG_WAVE3_ANIMATION:
imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE3_ANIMATION]);
break;
}
}
};
public RippleImageView(Context context) {
super(context);
initView(context);
}
public RippleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
getAttributeSet(context,attrs);
initView(context);
}
/**
* xml
* @param context
* @param attrs
*/
private void getAttributeSet(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.custume_ripple_imageview);
show_spacing_time = typedArray.getInt(R.styleable.custume_ripple_imageview_show_spacing_time, SHOW_SPACING_TIME);
imageViewWidth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewWidth, IMAMGEVIEW_SIZE);
imageViewHeigth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewHeigth, IMAMGEVIEW_SIZE);
Log.d("TAG","show_spacing_time="+show_spacing_time+"mm imageViewWidth="+imageViewWidth+"px imageViewHeigth="+imageViewHeigth+"px");
typedArray.recycle();
}
private void initView(Context context) {
setLayout(context);
for (int i = 0; i <imgs.length ; i++) {
mAnimationSet[i]=initAnimationSet();
}
}
/**
*
*/
private void setLayout(Context context) {
LayoutParams params=new LayoutParams(dip2px(context,imageViewWidth),dip2px(context,imageViewHeigth));
//
params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
/** */
for (int i = 0; i <SIZE ; i++) {
imgs[i] = new ImageView(context);
imgs[i].setImageResource(R.mipmap.point_empty);
addView(imgs[i],params);
}
LayoutParams params_bg=new LayoutParams(dip2px(context,imageViewWidth)+10,dip2px(context,imageViewHeigth)+10);
//
params_bg.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
/** */
img_bg=new ImageView(context);
img_bg.setImageResource(R.mipmap.point_org);
addView(img_bg,params_bg);
}
/**
*
* @return
*/
private AnimationSet initAnimationSet() {
AnimationSet as = new AnimationSet(true);
// :
ScaleAnimation sa = new ScaleAnimation(1f, 2f, 1f, 2f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
sa.setDuration(show_spacing_time * 3);
sa.setRepeatCount(Animation.INFINITE);//
//
AlphaAnimation aa = new AlphaAnimation(1, 0.1f);
aa.setDuration(show_spacing_time * 3);
aa.setRepeatCount(Animation.INFINITE);//
as.addAnimation(sa);
as.addAnimation(aa);
return as;
}
private static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
//============================ public =========================================
/**
*
*/
public void startWaveAnimation() {
imgs[0].startAnimation(mAnimationSet[0]);
mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, show_spacing_time);
mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, show_spacing_time * 2);
}
/**
*
*/
public void stopWaveAnimation() {
for (int i = 0; i <imgs.length ; i++) {
imgs[i].clearAnimation();
}
}
/** */
public int getShow_spacing_time() {
return show_spacing_time;
}
/** , 800 */
public void setShow_spacing_time(int show_spacing_time) {
this.show_spacing_time = show_spacing_time;
}
}
arrts 에 사용자 정의 속성 복사
<declare-styleable name="custume_ripple_imageview">
<attr name="show_spacing_time" format="integer"></attr>
<attr name="imageViewWidth" format="dimension"></attr>
<attr name="imageViewHeigth" format="dimension"></attr>
</declare-styleable>
기본 그림 복사
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.