1b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren/* 2b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Copyright (C) 2012 The Android Open Source Project 3b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * 4b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Licensed under the Apache License, Version 2.0 (the "License"); 5b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * you may not use this file except in compliance with the License. 6b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * You may obtain a copy of the License at 7b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * 8b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * http://www.apache.org/licenses/LICENSE-2.0 9b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * 10b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * Unless required by applicable law or agreed to in writing, software 11b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * distributed under the License is distributed on an "AS IS" BASIS, 12b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * See the License for the specific language governing permissions and 14b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren * limitations under the License. 15b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren */ 16b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 17b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenpackage com.android.dreams.phototable; 18b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 19b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.content.Context; 20b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.os.Handler; 21b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.os.Message; 22b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.util.AttributeSet; 23b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.view.View; 24b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport android.widget.TextView; 25b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 26b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenpublic class BummerView extends TextView { 27b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public static final int START = 1; 28b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public static final int MOVE = 2; 29b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 30b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren private int mDelay = 10000; // ms 31b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren private int mAnimTime = 2000; // ms 32b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren private boolean mAnimate = false; 33b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 34b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren private Handler mHandler = new Handler() { 35b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren @Override 36b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public void handleMessage(Message m) { 37b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren boolean animate = false; 38b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren switch (m.what) { 39b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren case MOVE: 40b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren animate = mAnimate; 41b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren // fall through 42b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren case START: 43b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final View parent = (View) BummerView.this.getParent(); 44b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren if (parent == null) 45b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren return; 46b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 47b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float framew = parent.getMeasuredWidth(); 48b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float frameh = parent.getMeasuredHeight(); 49b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float textw = getMeasuredWidth(); 50b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float texth = getMeasuredHeight(); 51b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 52b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float newx = (float) (Math.random() * (framew - textw)); 53b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final float newy = (float) (Math.random() * (frameh - texth)); 54b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren if (animate) { 55b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren animate().x(newx) 56b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren .y(newy) 57b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren .setDuration(mAnimTime) 58b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren .start(); 59b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } else { 60b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren setX(newx); 61b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren setY(newy); 62b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 63b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren setVisibility(View.VISIBLE); 64b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 65b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren removeMessages(MOVE); 66b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren sendEmptyMessageDelayed(MOVE, mDelay); 67b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren break; 68b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 69b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 70b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren }; 71b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 72b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public BummerView(Context context) { 73b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren super(context); 74b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 75b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 76b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public BummerView(Context context, AttributeSet attrs) { 77b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren this(context, attrs, 0); 78b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 79b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 80b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public BummerView(Context context, AttributeSet attrs, int flags) { 81b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren super(context, attrs, flags); 82b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 83b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 84b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public void setAnimationParams(boolean animate, int delay, int animTime) { 85b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mAnimate = animate; 86b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mDelay = delay; 87b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mAnimTime = animTime; 88b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 89b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 90b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren @Override 91b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public void onAttachedToWindow() { 92b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren final View parent = (View) this.getParent(); 93b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren parent.addOnLayoutChangeListener(new OnLayoutChangeListener() { 94b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren public void onLayoutChange(View v, int left, int top, int right, int bottom, 95b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren int oldLeft, int oldTop, int oldRight, int oldBottom) { 96b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren if (v == parent && right != oldRight) { 97b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mHandler.removeMessages(MOVE); 98b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mHandler.sendEmptyMessage(START); 99b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 100b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 101b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren }); 102b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 103b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren mHandler.sendEmptyMessage(START); 104b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren } 105b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren 106b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren} 107