If you think the Android project AndroidWearable-Samples listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
package com.example.android.support.wearable.notifications;
//www.java2s.comimport android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Random;
/**
* Custom display activity for an animated sample notification.
*/publicclass AnimatedNotificationDisplayActivity extends Activity {
publicstaticfinal String EXTRA_TITLE = "title";
privatestaticfinalint BASE_ANIMATION_DURATION_MS = 2000;
private Random mRandom;
privateint mAnimationRange;
private ImageView mImageView;
private Animator mAnimation;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_animated_notification_display);
mRandom = new Random(System.currentTimeMillis());
mAnimationRange = getResources().getDimensionPixelSize(R.dimen.animation_range);
String title = getIntent().getStringExtra(EXTRA_TITLE);
((TextView) findViewById(R.id.title)).setText(title);
mImageView = new ImageView(this);
mImageView.setImageResource(R.drawable.example_big_picture);
ImageZoomView zoomView = new ImageZoomView(this, mImageView, mAnimationRange);
zoomView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
((FrameLayout) findViewById(R.id.container)).addView(zoomView, 0);
createNextAnimation(false);
}
privatevoid createNextAnimation(boolean start) {
float startX = mImageView.getTranslationX();
float startY = mImageView.getTranslationY();
float endX = -mRandom.nextInt(mAnimationRange);
float endY = -mRandom.nextInt(mAnimationRange);
float distance = (float) Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));
mAnimation = ObjectAnimator.ofPropertyValuesHolder(mImageView,
PropertyValuesHolder.ofFloat("translationX", startX, endX),
PropertyValuesHolder.ofFloat("translationY", startY, endY));
mAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
mAnimation.setDuration(Math.max(BASE_ANIMATION_DURATION_MS / 10,
(int) (distance * BASE_ANIMATION_DURATION_MS / mAnimationRange)));
mAnimation.addListener(new AnimatorListenerAdapter() {
@Override
publicvoid onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
createNextAnimation(true);
}
});
if (start) {
mAnimation.start();
}
}
@Override
protectedvoid onResume() {
super.onResume();
mAnimation.start();
}
@Override
protectedvoid onPause() {
mAnimation.pause();
super.onPause();
}
/** Helper view that zooms in on a child image view */privatestaticclass ImageZoomView extends ViewGroup {
privatefinalint mZoomLength;
public ImageZoomView(Context context, ImageView imageView, int zoomLength) {
super(context);
addView(imageView);
mZoomLength = zoomLength;
}
@Override
protectedvoid onLayout(boolean changed, int left, int top, int right, int bottom) {
ImageView imageView = (ImageView) getChildAt(0);
// Resize the image view to be at least mZoomLength pixels larger in both
// dimensions than the containing view.
int imageWidth = imageView.getDrawable().getIntrinsicWidth();
int imageHeight = imageView.getDrawable().getIntrinsicHeight();
int minSize = Math.max(right - left, bottom - top) + mZoomLength;
if (imageWidth > imageHeight) {
imageWidth = minSize * imageWidth / imageHeight;
imageHeight = minSize;
} else {
imageHeight = minSize * imageHeight / imageWidth;
imageWidth = minSize;
}
imageView.layout(left, top, left + imageWidth, top + imageHeight);
}
}
}