package com.ufreedom.uikit;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.FrameLayout;
import com.ufreedom.uikit.effect.TranslateFloatingAnimator;
/**
* Author UFreedom
*/
public class FloatingText {
private FloatingTextBuilder mFloatingTextBuilder;
private FloatingTextView mFloatingTextView;
private FrameLayout floatingTextWrapper;
protected FloatingText(FloatingTextBuilder floatingTextBuilder) {
this.mFloatingTextBuilder = floatingTextBuilder;
}
public void startFloating(View view) {
mFloatingTextView.flyText(view);
}
public FloatingTextView attach2Window() {
ViewGroup rootView = (ViewGroup) mFloatingTextBuilder.getActivity().findViewById(Window.ID_ANDROID_CONTENT);
// get wrapper from activity
floatingTextWrapper = (FrameLayout) mFloatingTextBuilder.getActivity().findViewById(R.id.FloatingText_wrapper);
// if activity does not yet have a floatingText wrapper, we add one
if(floatingTextWrapper == null){
floatingTextWrapper = new FrameLayout(mFloatingTextBuilder.getActivity());
floatingTextWrapper.setId(R.id.FloatingText_wrapper);
rootView.addView(floatingTextWrapper);
}
mFloatingTextView = new FloatingTextView(mFloatingTextBuilder.getActivity());
// add view to floatingTextWrapper
floatingTextWrapper.bringToFront();
floatingTextWrapper.addView(mFloatingTextView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mFloatingTextView.setFloatingTextBuilder(mFloatingTextBuilder);
return mFloatingTextView;
}
public void dettachFromWidow() {
if (mFloatingTextView == null || mFloatingTextBuilder == null) return;
ViewGroup rootView = (ViewGroup) mFloatingTextBuilder.getActivity().findViewById(Window.ID_ANDROID_CONTENT);
rootView.removeView(mFloatingTextView);
}
public static class FloatingTextBuilder {
private Activity activity;
private int textColor;
private int textSize;
private FloatingAnimator floatingAnimator;
private FloatingPathEffect floatingPathEffect;
private String textContent = "";
private int offsetX;
private int offsetY;
public FloatingTextBuilder(Activity activity) {
this.activity = activity;
}
public int getOffsetX() {
return offsetX;
}
public FloatingTextBuilder offsetX(int offsetX) {
this.offsetX = offsetX;
return this;
}
public int getOffsetY() {
return offsetY;
}
public FloatingTextBuilder offsetY(int offsetY) {
this.offsetY = offsetY;
return this;
}
public Activity getActivity() {
return activity;
}
public int getTextColor() {
return textColor;
}
public int getTextSize() {
return textSize;
}
public FloatingAnimator getFloatingAnimator() {
return floatingAnimator;
}
public FloatingPathEffect getFloatingPathEffect() {
return floatingPathEffect;
}
public String getTextContent() {
return textContent;
}
public FloatingTextBuilder textColor(int mTextColor) {
this.textColor = mTextColor;
return this;
}
public FloatingTextBuilder textSize(int mTextSize) {
this.textSize = mTextSize;
return this;
}
public FloatingTextBuilder floatingAnimatorEffect(FloatingAnimator floatingAnimator) {
this.floatingAnimator = floatingAnimator;
return this;
}
public FloatingTextBuilder textContent(String textContent) {
this.textContent = textContent;
return this;
}
public FloatingTextBuilder floatingPathEffect(FloatingPathEffect floatingPathEffect) {
this.floatingPathEffect = floatingPathEffect;
return this;
}
public FloatingText build() {
if (activity == null) {
throw new NullPointerException("activity should not be null");
}
if (textContent == null) {
throw new NullPointerException("textContent should not be null");
}
if (floatingAnimator == null) {
floatingAnimator = new TranslateFloatingAnimator();
}
FloatingText floatingText = new FloatingText(this);
return floatingText;
}
}
}