/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.dreams.phototable; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; public class BummerView extends TextView { public static final int START = 1; public static final int MOVE = 2; private int mDelay = 10000; // ms private int mAnimTime = 2000; // ms private boolean mAnimate = false; private Handler mHandler = new Handler() { @Override public void handleMessage(Message m) { boolean animate = false; switch (m.what) { case MOVE: animate = mAnimate; // fall through case START: final View parent = (View) BummerView.this.getParent(); if (parent == null) return; final float framew = parent.getMeasuredWidth(); final float frameh = parent.getMeasuredHeight(); final float textw = getMeasuredWidth(); final float texth = getMeasuredHeight(); final float newx = (float) (Math.random() * (framew - textw)); final float newy = (float) (Math.random() * (frameh - texth)); if (animate) { animate().x(newx) .y(newy) .setDuration(mAnimTime) .start(); } else { setX(newx); setY(newy); } setVisibility(View.VISIBLE); removeMessages(MOVE); sendEmptyMessageDelayed(MOVE, mDelay); break; } } }; public BummerView(Context context) { super(context); } public BummerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BummerView(Context context, AttributeSet attrs, int flags) { super(context, attrs, flags); } public void setAnimationParams(boolean animate, int delay, int animTime) { mAnimate = animate; mDelay = delay; mAnimTime = animTime; } @Override public void onAttachedToWindow() { final View parent = (View) this.getParent(); parent.addOnLayoutChangeListener(new OnLayoutChangeListener() { public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if (v == parent && right != oldRight) { mHandler.removeMessages(MOVE); mHandler.sendEmptyMessage(START); } } }); mHandler.sendEmptyMessage(START); } }