package
com.zhf.android_ripple;
import
java.lang.ref.SoftReference;
import
android.content.Context;
import
android.graphics.Bitmap;
import
android.graphics.BitmapFactory;
import
android.util.AttributeSet;
import
android.util.Log;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.animation.AccelerateDecelerateInterpolator;
import
android.view.animation.AlphaAnimation;
import
android.view.animation.Animation;
import
android.view.animation.Animation.AnimationListener;
import
android.view.animation.AnimationSet;
import
android.view.animation.ScaleAnimation;
import
android.widget.FrameLayout;
import
android.widget.ImageView;
public
class
AnimationFrameLayout
extends
FrameLayout {
private
SoftReference<Bitmap> m_bitmapRipple;
private
ImageView[] m_imageVRadars;
public
AnimationFrameLayout(Context context) {
super
(context);
init();
}
public
AnimationFrameLayout(Context context, AttributeSet attrs,
int
defStyle) {
super
(context, attrs, defStyle);
init();
}
public
AnimationFrameLayout(Context context, AttributeSet attrs) {
super
(context, attrs);
init();
}
/**初始化**/
private
void
init() {
loadRadarBitmap();
m_imageVRadars =
new
ImageView[
3
];
View v = LayoutInflater.from(getContext()).inflate(R.layout.wt_search_device_anima,
this
);
m_imageVRadars[
0
] = (ImageView) v.findViewById(R.id.radar_ray_1);
m_imageVRadars[
1
] = (ImageView) v.findViewById(R.id.radar_ray_2);
m_imageVRadars[
2
] = (ImageView) v.findViewById(R.id.radar_ray_3);
}
/**加载图片**/
private
void
loadRadarBitmap() {
try
{
m_bitmapRipple =
new
SoftReference<Bitmap>(BitmapFactory.decodeStream(getContext().getResources()
.openRawResource(R.drawable.wifi_body_ripple)));
}
catch
(Exception localException) {
Log.e(
"WTSearchAnimationFrameLayout"
,
Log.getStackTraceString(localException));
}
catch
(OutOfMemoryError localOutOfMemoryError) {
Log.e(
"WTSearchAnimationFrameLayout"
,
Log.getStackTraceString(localOutOfMemoryError));
System.gc();
}
}
/**重置,停止动画**/
public
void
stopAnimation() {
for
(
int
i=
0
; i< m_imageVRadars.length; ++i) {
if
(m_bitmapRipple !=
null
){
Bitmap localBitmap = m_bitmapRipple.get();
if
(localBitmap !=
null
&& !localBitmap.isRecycled()) {
localBitmap.recycle();
}
m_bitmapRipple =
null
;
ImageView localImageView = m_imageVRadars[i];
localImageView.setImageBitmap(
null
);
localImageView.setVisibility(View.GONE);
localImageView.clearAnimation();
}
}
}
/**开始动画**/
public
void
startAnimation() {
if
(m_bitmapRipple ==
null
) {
loadRadarBitmap();
}
for
(
int
i =
0
; i < m_imageVRadars.length; i++) {
ImageView localImageView;
long
ltime;
while
(
true
) {
localImageView = m_imageVRadars[i];
localImageView.setImageBitmap(m_bitmapRipple.get());
localImageView.setVisibility(View.VISIBLE);
ltime= 333L * i;
if
(localImageView.getAnimation() ==
null
) {
break
;
}
localImageView.getAnimation().start();
}
ScaleAnimation localScaleAnimation =
new
ScaleAnimation(
1
.0f,
14
.0f,
1
.0f,
14
.0f,
1
,
0
.5f,
1
,
0
.5f);
localScaleAnimation.setRepeatCount(-
1
);
AlphaAnimation localAlphaAnimation =
new
AlphaAnimation(
1
.0f,
0
.2f);
AnimationSet localAnimationSet =
new
AnimationSet(
true
);
localAnimationSet.addAnimation(localScaleAnimation);
localAnimationSet.addAnimation(localAlphaAnimation);
localAnimationSet.setDuration(1000L);
localAnimationSet.setFillEnabled(
true
);
localAnimationSet.setFillBefore(
true
);
localAnimationSet.setStartOffset(ltime);
localAnimationSet.setInterpolator(
new
AccelerateDecelerateInterpolator());
localAnimationSet.setAnimationListener(
new
MySearchAnimationHandler(
this
,localImageView));
localImageView.setAnimation(localAnimationSet);
localImageView.startAnimation(localAnimationSet);
}
}
/**动画监听类**/
public
class
MySearchAnimationHandler
implements
AnimationListener{
private
ImageView m_imageVRadar;
public
MySearchAnimationHandler(AnimationFrameLayout paramImageView,ImageView m_imageVRadar) {
super
();
this
.m_imageVRadar = m_imageVRadar;
}
@Override
public
void
onAnimationStart(Animation animation) {
}
@Override
public
void
onAnimationEnd(Animation animation) {
this
.m_imageVRadar.setVisibility(View.GONE);
}
@Override
public
void
onAnimationRepeat(Animation animation) {
animation.setStartOffset(0L);
}
}
}