Skip to content

Most visited

Recently visited

navigation
Notifications / Wearable / src / com.example.android.support.wearable.notifications /

AnimatedNotificationDisplayActivity.java

1
/*
2
 * Copyright (C) 2014 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.support.wearable.notifications;
18
 
19
import android.animation.Animator;
20
import android.animation.AnimatorListenerAdapter;
21
import android.animation.ObjectAnimator;
22
import android.animation.PropertyValuesHolder;
23
import android.app.Activity;
24
import android.content.Context;
25
import android.os.Bundle;
26
import android.view.ViewGroup;
27
import android.view.animation.AccelerateDecelerateInterpolator;
28
import android.widget.FrameLayout;
29
import android.widget.ImageView;
30
import android.widget.TextView;
31
 
32
import java.util.Random;
33
 
34
/**
35
 * Custom display activity for an animated sample notification.
36
 */
37
public class AnimatedNotificationDisplayActivity extends Activity {
38
    public static final String EXTRA_TITLE = "title";
39
 
40
    private static final int BASE_ANIMATION_DURATION_MS = 2000;
41
 
42
    private Random mRandom;
43
    private int mAnimationRange;
44
    private ImageView mImageView;
45
    private Animator mAnimation;
46
 
47
    @Override
48
    protected void onCreate(Bundle savedInstanceState) {
49
        super.onCreate(savedInstanceState);
50
        setContentView(R.layout.activity_animated_notification_display);
51
 
52
        mRandom = new Random(System.currentTimeMillis());
53
        mAnimationRange = getResources().getDimensionPixelSize(R.dimen.animation_range);
54
 
55
        String title = getIntent().getStringExtra(EXTRA_TITLE);
56
        ((TextView) findViewById(R.id.title)).setText(title);
57
 
58
        mImageView = new ImageView(this);
59
        mImageView.setImageResource(R.drawable.example_big_picture);
60
 
61
        ImageZoomView zoomView = new ImageZoomView(this, mImageView, mAnimationRange);
62
        zoomView.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
63
                ViewGroup.LayoutParams.MATCH_PARENT));
64
 
65
        ((FrameLayout) findViewById(R.id.container)).addView(zoomView, 0);
66
 
67
        createNextAnimation(false);
68
    }
69
 
70
    private void createNextAnimation(boolean start) {
71
        float startX = mImageView.getTranslationX();
72
        float startY = mImageView.getTranslationY();
73
        float endX = -mRandom.nextInt(mAnimationRange);
74
        float endY = -mRandom.nextInt(mAnimationRange);
75
        float distance = (float) Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));
76
 
77
        mAnimation = ObjectAnimator.ofPropertyValuesHolder(mImageView,
78
                PropertyValuesHolder.ofFloat("translationX", startX, endX),
79
                PropertyValuesHolder.ofFloat("translationY", startY, endY));
80
        mAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
81
 
82
        mAnimation.setDuration(Math.max(BASE_ANIMATION_DURATION_MS / 10,
83
                (int) (distance * BASE_ANIMATION_DURATION_MS / mAnimationRange)));
84
 
85
        mAnimation.addListener(new AnimatorListenerAdapter() {
86
            @Override
87
            public void onAnimationEnd(Animator animation) {
88
                super.onAnimationEnd(animation);
89
                createNextAnimation(true);
90
            }
91
        });
92
        if (start) {
93
            mAnimation.start();
94
        }
95
    }
96
 
97
    @Override
98
    protected void onResume() {
99
        super.onResume();
100
        mAnimation.start();
101
    }
102
 
103
    @Override
104
    protected void onPause() {
105
        mAnimation.pause();
106
        super.onPause();
107
    }
108
 
109
    /** Helper view that zooms in on a child image view */
110
    private static class ImageZoomView extends ViewGroup {
111
        private final int mZoomLength;
112
 
113
        public ImageZoomView(Context context, ImageView imageView, int zoomLength) {
114
            super(context);
115
            addView(imageView);
116
            mZoomLength = zoomLength;
117
        }
118
 
119
        @Override
120
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
121
            ImageView imageView = (ImageView) getChildAt(0);
122
 
123
            // Resize the image view to be at least mZoomLength pixels larger in both
124
            // dimensions than the containing view.
125
            int imageWidth = imageView.getDrawable().getIntrinsicWidth();
126
            int imageHeight = imageView.getDrawable().getIntrinsicHeight();
127
            int minSize = Math.max(right - left, bottom - top) + mZoomLength;
128
            if (imageWidth > imageHeight) {
129
                imageWidth = minSize * imageWidth / imageHeight;
130
                imageHeight = minSize;
131
            } else {
132
                imageHeight = minSize * imageHeight / imageWidth;
133
                imageWidth = minSize;
134
            }
135
            imageView.layout(left, top, left + imageWidth, top + imageHeight);
136
        }
137
    }
138
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.