Commit 941d3923 authored by wanglei's avatar wanglei

...

parent 7f991049
package com.base.pdfviewerscannerwhite.ui.view.guideview;
/**
* 遮罩系统运行异常的封装
* Created by binIoter
*/
class BuildException extends RuntimeException {
private static final long serialVersionUID = 6208777692136933357L;
private final String mDetailMessage;
public BuildException() {
mDetailMessage = "General error.";
}
public BuildException(String detailMessage) {
mDetailMessage = detailMessage;
}
@Override
public String getMessage() {
return "Build GuideFragment failed: " + mDetailMessage;
}
}
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.graphics.Rect;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.base.pdfviewerscannerwhite.utils.LogEx;
/**
* Created by binIoter
*/
class Common {
/**
* 设置Component
*/
static View componentToView(LayoutInflater inflater, Component c) {
View view = c.getView(inflater);
final MaskView.LayoutParams lp = new MaskView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
lp.offsetX = c.getXOffset();
lp.offsetY = c.getYOffset();
lp.targetAnchor = c.getAnchor();
lp.targetParentPosition = c.getFitPosition();
view.setLayoutParams(lp);
return view;
}
/**
* Rect在屏幕上去掉状态栏高度的绝对位置
*/
static Rect getViewAbsRect(View view, int parentX, int parentY) {
int[] loc = new int[2];
view.getLocationInWindow(loc);
LogEx.INSTANCE.logDebug("getViewAbsRect", "x=" + loc[0] + "y=" + loc[1], true);
Rect rect = new Rect();
rect.set(loc[0], loc[1], loc[0] + view.getMeasuredWidth(), loc[1] + view.getMeasuredHeight());
rect.offset(-parentX, -parentY);
return rect;
}
}
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.view.LayoutInflater;
import android.view.View;
/**
* * 遮罩系统中相对于目标区域而绘制一些图片或者文字等view需要实现的接口. <br>
* * <br>
* * {@link #getView(LayoutInflater)} <br>
* * {@link #getAnchor()} <br>
* * {@link #getFitPosition()} <br>
* * {@link #getXOffset()} <br>
* * {@link #getYOffset()}
* * <br>
* * 具体创建遮罩的说明请参加{@link GuideBuilder}
* *
*
* Created by binIoter
*/
public interface Component {
public final static int FIT_START = MaskView.LayoutParams.PARENT_START;
public final static int FIT_END = MaskView.LayoutParams.PARENT_END;
public final static int FIT_CENTER = MaskView.LayoutParams.PARENT_CENTER;
public final static int ANCHOR_LEFT = MaskView.LayoutParams.ANCHOR_LEFT;
public final static int ANCHOR_RIGHT = MaskView.LayoutParams.ANCHOR_RIGHT;
public final static int ANCHOR_BOTTOM = MaskView.LayoutParams.ANCHOR_BOTTOM;
public final static int ANCHOR_TOP = MaskView.LayoutParams.ANCHOR_TOP;
public final static int ANCHOR_OVER = MaskView.LayoutParams.ANCHOR_OVER;
/**
* 圆角矩形&矩形
*/
public final static int ROUNDRECT = 0;
/**
* 圆形
*/
public final static int CIRCLE = 1;
/**
* 需要显示的view
*
* @param inflater use to inflate xml resource file
* @return the component view
*/
View getView(LayoutInflater inflater);
/**
* 相对目标View的锚点
*
* @return could be {@link #ANCHOR_LEFT}, {@link #ANCHOR_RIGHT},
* {@link #ANCHOR_TOP}, {@link #ANCHOR_BOTTOM}, {@link #ANCHOR_OVER}
*/
int getAnchor();
/**
* 相对目标View的对齐
*
* @return could be {@link #FIT_START}, {@link #FIT_END},
* {@link #FIT_CENTER}
*/
int getFitPosition();
/**
* 相对目标View的X轴位移,在计算锚点和对齐之后。
*
* @return X轴偏移量, 单位 dp
*/
int getXOffset();
/**
* 相对目标View的Y轴位移,在计算锚点和对齐之后。
*
* @return Y轴偏移量,单位 dp
*/
int getYOffset();
}
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.View;
/**
* 遮罩系统创建时配置参数的封装 <br/>
* Created by binIoter
*/
class Configuration implements Parcelable {
/**
* 需要被找的View
*/
View mTargetView = null;
/**
* 高亮区域的padding
*/
int mPadding = 0;
/**
* 高亮区域的左侧padding
*/
int mPaddingLeft = 0;
/**
* 高亮区域的顶部padding
*/
int mPaddingTop = 0;
/**
* 高亮区域的右侧padding
*/
int mPaddingRight = 0;
/**
* 高亮区域的底部padding
*/
int mPaddingBottom = 0;
/**
* 是否可以透过蒙层点击,默认不可以
*/
boolean mOutsideTouchable = false;
/**
* 遮罩透明度
*/
int mAlpha = 255;
/**
* 遮罩覆盖区域控件Id
* <p/>
* 该控件的大小既该导航页面的大小
*/
int mFullingViewId = -1;
/**
* 目标控件Id
*/
int mTargetViewId = -1;
/**
* 高亮区域的圆角大小
*/
int mCorner = 0;
/**
* 高亮区域的图形样式,默认为矩形
*/
int mGraphStyle = Component.ROUNDRECT;
/**
* 遮罩背景颜色id
*/
int mFullingColorId = android.R.color.black;
/**
* 是否在点击的时候自动退出导航
*/
boolean mAutoDismiss = true;
/**
* 是否覆盖目标控件
*/
boolean mOverlayTarget = false;
boolean mShowCloseButton = false;
int mEnterAnimationId = -1;
int mExitAnimationId = -1;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mAlpha);
dest.writeInt(mFullingViewId);
dest.writeInt(mTargetViewId);
dest.writeInt(mFullingColorId);
dest.writeInt(mCorner);
dest.writeInt(mPadding);
dest.writeInt(mPaddingLeft);
dest.writeInt(mPaddingTop);
dest.writeInt(mPaddingRight);
dest.writeInt(mPaddingBottom);
dest.writeInt(mGraphStyle);
dest.writeByte((byte) (mAutoDismiss ? 1 : 0));
dest.writeByte((byte) (mOverlayTarget ? 1 : 0));
}
public static final Creator<Configuration> CREATOR = new Creator<Configuration>() {
@Override
public Configuration createFromParcel(Parcel source) {
Configuration conf = new Configuration();
conf.mAlpha = source.readInt();
conf.mFullingViewId = source.readInt();
conf.mTargetViewId = source.readInt();
conf.mFullingColorId = source.readInt();
conf.mCorner = source.readInt();
conf.mPadding = source.readInt();
conf.mPaddingLeft = source.readInt();
conf.mPaddingTop = source.readInt();
conf.mPaddingRight = source.readInt();
conf.mPaddingBottom = source.readInt();
conf.mGraphStyle = source.readInt();
conf.mAutoDismiss = source.readByte() == 1;
conf.mOverlayTarget = source.readByte() == 1;
return conf;
}
@Override
public Configuration[] newArray(int size) {
return new Configuration[size];
}
};
}
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.content.Context;
/**
* Created by binIoter
*/
public class DimenUtil {
/** sp转换成px */
public static int sp2px(Context context, float spValue) {
float fontScale = context.getApplicationContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (spValue * fontScale + 0.5f);
}
/** px转换成sp */
public static int px2sp(Context context, float pxValue) {
float fontScale = context.getApplicationContext().getResources().getDisplayMetrics().density;
return (int) (pxValue / fontScale + 0.5f);
}
/** dip转换成px */
public static int dp2px(Context context, float dipValue) {
float scale = context.getApplicationContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (dipValue * scale + 0.5f);
}
/** px转换成dip */
public static int px2dp(Context context, float pxValue) {
float scale = context.getApplicationContext().getResources().getDisplayMetrics().scaledDensity;
return (int) (pxValue / scale + 0.5f);
}
}
\ No newline at end of file
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.app.Activity;
import android.content.Context;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
/**
* 遮罩系统的封装 <br>
* * 外部需要调用{@link GuideBuilder}来创建该实例,实例创建后调用
* * {@link #show(Activity)} 控制显示; 调用 {@link #dismiss()}让遮罩系统消失。 <br>
* <p>
* Created by binIoter
*/
public class Guide implements View.OnKeyListener, View.OnTouchListener {
Guide() {
}
/**
* 滑动临界值
*/
private static final int SLIDE_THRESHOLD = 30;
private Configuration mConfiguration;
private MaskView mMaskView;
private Component[] mComponents;
// 根据locInwindow定位后,是否需要判断loc值非0
private boolean mShouldCheckLocInWindow = true;
private GuideBuilder.OnVisibilityChangedListener mOnVisibilityChangedListener;
private GuideBuilder.OnSlideListener mOnSlideListener;
void setConfiguration(Configuration configuration) {
mConfiguration = configuration;
}
void setComponents(Component[] components) {
mComponents = components;
}
void setCallback(GuideBuilder.OnVisibilityChangedListener listener) {
this.mOnVisibilityChangedListener = listener;
}
public void setOnSlideListener(GuideBuilder.OnSlideListener onSlideListener) {
this.mOnSlideListener = onSlideListener;
}
/**
* 显示遮罩
*
* @param activity 目标Activity
*/
public void show(Activity activity) {
show(activity, null);
}
/**
* 显示遮罩
*
* @param activity 目标Activity
* @param overlay 遮罩层view
*/
public void show(Activity activity, ViewGroup overlay) {
mMaskView = onCreateView(activity, overlay);
if (overlay == null) {
overlay = (ViewGroup) activity.getWindow().getDecorView();
}
if (mMaskView.getParent() == null && mConfiguration.mTargetView != null) {
overlay.addView(mMaskView);
if (mConfiguration.mEnterAnimationId != -1) {
Animation anim = AnimationUtils.loadAnimation(activity, mConfiguration.mEnterAnimationId);
assert anim != null;
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
if (mOnVisibilityChangedListener != null) {
mOnVisibilityChangedListener.onShown();
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mMaskView.startAnimation(anim);
} else {
if (mOnVisibilityChangedListener != null) {
mOnVisibilityChangedListener.onShown();
}
}
}
}
public void clear() {
if (mMaskView == null) {
return;
}
final ViewGroup vp = (ViewGroup) mMaskView.getParent();
if (vp == null) {
return;
}
vp.removeView(mMaskView);
onDestroy();
}
/**
* 隐藏该遮罩并回收资源相关
*/
public void dismiss() {
if (mMaskView == null) {
return;
}
final ViewGroup vp = (ViewGroup) mMaskView.getParent();
if (vp == null) {
return;
}
if (mConfiguration.mExitAnimationId != -1) {
// mMaskView may leak if context is null
Context context = mMaskView.getContext();
assert context != null;
Animation anim = AnimationUtils.loadAnimation(context, mConfiguration.mExitAnimationId);
assert anim != null;
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
vp.removeView(mMaskView);
if (mOnVisibilityChangedListener != null) {
mOnVisibilityChangedListener.onDismiss();
}
onDestroy();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
mMaskView.startAnimation(anim);
} else {
vp.removeView(mMaskView);
if (mOnVisibilityChangedListener != null) {
mOnVisibilityChangedListener.onDismiss();
}
onDestroy();
}
}
/**
* 根据locInwindow定位后,是否需要判断loc值非0
*/
public void setShouldCheckLocInWindow(boolean set) {
mShouldCheckLocInWindow = set;
}
private MaskView onCreateView(Activity activity, ViewGroup overlay) {
if (overlay == null) {
overlay = (ViewGroup) activity.getWindow().getDecorView();
}
MaskView maskView = new MaskView(activity);
maskView.setFullingColor(activity.getResources().getColor(mConfiguration.mFullingColorId));
maskView.setFullingAlpha(mConfiguration.mAlpha);
maskView.setHighTargetCorner(mConfiguration.mCorner);
maskView.setPadding(mConfiguration.mPadding);
maskView.setPaddingLeft(mConfiguration.mPaddingLeft);
maskView.setPaddingTop(mConfiguration.mPaddingTop);
maskView.setPaddingRight(mConfiguration.mPaddingRight);
maskView.setPaddingBottom(mConfiguration.mPaddingBottom);
maskView.setHighTargetGraphStyle(mConfiguration.mGraphStyle);
maskView.setOverlayTarget(mConfiguration.mOverlayTarget);
maskView.setOnKeyListener(this);
// For removing the height of status bar we need the root content view's
// location on screen
int parentX = 0;
int parentY = 0;
if (overlay != null) {
int[] loc = new int[2];
overlay.getLocationInWindow(loc);
parentX = loc[0];
parentY = loc[1];
}
if (mConfiguration.mTargetView != null) {
maskView.setTargetRect(Common.getViewAbsRect(mConfiguration.mTargetView, parentX, parentY));
} else {
// Gets the target view's abs rect
View target = activity.findViewById(mConfiguration.mTargetViewId);
if (target != null) {
maskView.setTargetRect(Common.getViewAbsRect(target, parentX, parentY));
}
}
if (mConfiguration.mOutsideTouchable) {
maskView.setClickable(false);
} else {
maskView.setOnTouchListener(this);
}
// Adds the components to the mask view.
for (Component c : mComponents) {
maskView.addView(Common.componentToView(activity.getLayoutInflater(), c));
}
return maskView;
}
private void onDestroy() {
mConfiguration = null;
mComponents = null;
mOnVisibilityChangedListener = null;
mOnSlideListener = null;
mMaskView.removeAllViews();
mMaskView = null;
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (mConfiguration != null && mConfiguration.mAutoDismiss) {
dismiss();
return true;
} else {
return false;
}
}
return false;
}
float startY = -1f;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
startY = motionEvent.getY();
} else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
if (startY - motionEvent.getY() > DimenUtil.dp2px(view.getContext(), SLIDE_THRESHOLD)) {
if (mOnSlideListener != null) {
mOnSlideListener.onSlideListener(GuideBuilder.SlideState.UP);
}
} else if (motionEvent.getY() - startY > DimenUtil.dp2px(view.getContext(), SLIDE_THRESHOLD)) {
if (mOnSlideListener != null) {
mOnSlideListener.onSlideListener(GuideBuilder.SlideState.DOWN);
}
}
if (mConfiguration != null && mConfiguration.mAutoDismiss) {
dismiss();
}
}
return true;
}
}
package com.base.pdfviewerscannerwhite.ui.view.guideview;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import com.base.pdfviewerscannerwhite.R;
/**
* Created by binIoter on 16/6/17.
*/
public class LottieComponent implements Component {
@Override
public View getView(LayoutInflater inflater) {
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.layout_lottie_guide, null);
// ll.setOnClickListener(view -> Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show());
return ll;
}
@Override
public int getAnchor() {
return Component.ANCHOR_BOTTOM;
}
@Override
public int getFitPosition() {
return Component.FIT_CENTER;
}
@Override
public int getXOffset() {
return 0;
}
@Override
public int getYOffset() {
return -150;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.airbnb.lottie.LottieAnimationView
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_gravity="center_horizontal"
android:scaleType="centerCrop"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/guide_finger" />
</LinearLayout>
\ No newline at end of file
{"nm":"tap","ddd":0,"h":500,"w":500,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":5000,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[-27,-92,0],"ix":1},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0,"y":1},"s":[0,0,100],"t":61},{"s":[263,263,100],"t":88}],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[246,197,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[100],"t":61},{"s":[0],"t":86}],"ix":11,"x":"var $bm_rt;\n$bm_rt = transform.opacity;"}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[55.734,55.734],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[5],"t":61},{"s":[0],"t":92}],"ix":5},"c":{"a":0,"k":[1,0.7451,0.7451],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[-28.133,-94.133],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":1},{"ty":4,"nm":"hand","sr":1,"st":0,"op":5000,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[10,14.5,0],"ix":1},"s":{"a":0,"k":[586,586,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[264.319,272.606,0],"ix":2},"r":{"a":0,"k":-32,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Group 1","ix":1,"cix":2,"np":2,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-0.988,2.4],[0.722,0.509],[0.006,0.278],[0.618,0.385],[0.272,0.057],[0.027,0.017],[-0.003,0.108],[0.662,0.412],[0.279,0.07],[0.023,0.015],[-0.084,0.136],[0,0],[0.834,0.519],[0.692,-1.112],[0,0],[0.414,0.257],[0.007,0.36],[0,0],[0.509,0.317],[0.022,-1.817],[0,0],[-0.089,-0.056],[-2.181,-1.312],[-0.045,0.063],[0,0],[-0.045,0.02]],"o":[[1.029,-2.5],[-0.228,-0.161],[-0.028,-1.168],[-0.443,-0.276],[-0.035,-0.006],[-0.088,-0.054],[0.038,-1.29],[-0.385,-0.24],[-0.03,-0.007],[-0.127,-0.079],[0,0],[0.692,-1.112],[-0.835,-0.52],[0,0],[-0.313,0.503],[-0.252,-0.157],[0,0],[0.01,-0.804],[-1.15,-0.716],[0,0],[-0.007,0.104],[0,0],[2.393,1.439],[0,0],[0.028,-0.04],[4.267,-1.959]],"v":[[9.386,4.737],[8.322,0.373],[7.943,-0.322],[6.705,-2.547],[5.532,-3.008],[5.438,-3.045],[5.298,-3.308],[4.041,-5.742],[2.981,-6.184],[2.901,-6.218],[2.811,-6.606],[5.84,-11.472],[5.216,-14.176],[2.514,-13.543],[-2.815,-4.983],[-4.147,-4.683],[-4.591,-5.474],[-4.628,-7.214],[-5.491,-8.897],[-8.559,-7.262],[-9.755,8.699],[-9.613,8.943],[-5.293,12.327],[-0.398,14.39],[2.063,10.93],[2.172,10.842]]}],"t":50},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[{"c":true,"i":[[-0.988,2.4],[0.722,0.509],[0.006,0.278],[0.618,0.385],[0.272,0.057],[0.027,0.017],[-0.003,0.108],[0.662,0.412],[0.279,0.07],[0.023,0.015],[-0.084,0.136],[0,0],[0.834,0.519],[0.692,-1.112],[0,0],[0.414,0.257],[0.007,0.36],[0,0],[0.509,0.317],[0.022,-1.817],[0,0],[-0.089,-0.056],[-2.181,-1.312],[-0.045,0.063],[0,0],[-0.045,0.02]],"o":[[1.029,-2.5],[-0.228,-0.161],[-0.028,-1.168],[-0.443,-0.276],[-0.035,-0.006],[-0.088,-0.054],[0.038,-1.29],[-0.385,-0.24],[-0.03,-0.007],[-0.127,-0.079],[0,0],[0.692,-1.112],[-0.835,-0.52],[0,0],[-0.313,0.503],[-0.252,-0.157],[0,0],[0.01,-0.804],[-1.15,-0.716],[0,0],[-0.007,0.104],[0,0],[2.393,1.439],[0,0],[0.028,-0.04],[4.267,-1.959]],"v":[[9.386,4.737],[8.322,0.373],[7.943,-0.322],[6.705,-2.547],[5.532,-3.008],[5.438,-3.045],[5.298,-3.308],[4.041,-5.742],[2.981,-6.184],[2.901,-6.218],[2.811,-6.606],[4.646,-9.424],[4.022,-12.128],[1.32,-11.495],[-2.815,-4.983],[-4.147,-4.683],[-4.591,-5.474],[-4.628,-7.214],[-5.491,-8.897],[-8.559,-7.262],[-9.755,8.699],[-9.613,8.943],[-4.677,11.241],[-0.398,14.39],[2.063,10.93],[2.172,10.842]]}],"t":61},{"o":{"x":0.333,"y":0},"i":{"x":0.833,"y":1},"s":[{"c":true,"i":[[-0.988,2.4],[0.722,0.509],[0.006,0.278],[0.618,0.385],[0.272,0.057],[0.027,0.017],[-0.003,0.108],[0.662,0.412],[0.279,0.07],[0.023,0.015],[-0.084,0.136],[0,0],[0.834,0.519],[0.692,-1.112],[0,0],[0.414,0.257],[0.007,0.36],[0,0],[0.509,0.317],[0.022,-1.817],[0,0],[-0.089,-0.056],[-2.181,-1.312],[-0.045,0.063],[0,0],[-0.045,0.02]],"o":[[1.029,-2.5],[-0.228,-0.161],[-0.028,-1.168],[-0.443,-0.276],[-0.035,-0.006],[-0.088,-0.054],[0.038,-1.29],[-0.385,-0.24],[-0.03,-0.007],[-0.127,-0.079],[0,0],[0.692,-1.112],[-0.835,-0.52],[0,0],[-0.313,0.503],[-0.252,-0.157],[0,0],[0.01,-0.804],[-1.15,-0.716],[0,0],[-0.007,0.104],[0,0],[2.393,1.439],[0,0],[0.028,-0.04],[4.267,-1.959]],"v":[[9.386,4.737],[8.322,0.373],[7.943,-0.322],[6.705,-2.547],[5.532,-3.008],[5.438,-3.045],[5.298,-3.308],[4.041,-5.742],[2.981,-6.184],[2.901,-6.218],[2.811,-6.606],[5.84,-11.472],[5.216,-14.176],[2.514,-13.543],[-2.815,-4.983],[-4.147,-4.683],[-4.591,-5.474],[-4.628,-7.214],[-5.491,-8.897],[-8.559,-7.262],[-9.755,8.699],[-9.613,8.943],[-5.267,12.306],[-0.398,14.39],[2.063,10.93],[2.172,10.842]]}],"t":72},{"s":[{"c":true,"i":[[-0.988,2.4],[0.722,0.509],[0.006,0.278],[0.618,0.385],[0.272,0.057],[0.027,0.017],[-0.003,0.108],[0.662,0.412],[0.279,0.07],[0.023,0.015],[-0.084,0.136],[0,0],[0.834,0.519],[0.692,-1.112],[0,0],[0.414,0.257],[0.007,0.36],[0,0],[0.509,0.317],[0.022,-1.817],[0,0],[-0.089,-0.056],[-3.329,-1.925],[-0.044,0.062],[0,0],[-0.045,0.02]],"o":[[1.029,-2.5],[-0.228,-0.161],[-0.028,-1.168],[-0.443,-0.276],[-0.035,-0.006],[-0.088,-0.054],[0.038,-1.29],[-0.385,-0.24],[-0.03,-0.007],[-0.127,-0.079],[0,0],[0.692,-1.112],[-0.835,-0.52],[0,0],[-0.313,0.503],[-0.252,-0.157],[0,0],[0.01,-0.804],[-1.15,-0.716],[0,0],[-0.007,0.104],[0,0],[3.323,1.921],[0,0],[0.028,-0.04],[4.267,-1.959]],"v":[[9.386,4.737],[8.322,0.373],[7.943,-0.322],[6.705,-2.547],[5.532,-3.008],[5.438,-3.045],[5.298,-3.308],[4.041,-5.742],[2.981,-6.184],[2.901,-6.218],[2.811,-6.606],[5.84,-11.472],[5.216,-14.176],[2.514,-13.543],[-2.815,-4.983],[-4.147,-4.683],[-4.591,-5.474],[-4.628,-7.214],[-5.491,-8.897],[-8.559,-7.262],[-9.755,8.699],[-9.613,8.943],[-5.305,12.33],[-0.398,14.39],[2.063,10.93],[2.172,10.842]]}],"t":85}],"ix":2}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[1,1,1],"ix":4},"r":1,"o":{"a":0,"k":100,"ix":5}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[9.755,14.498],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]}],"ind":2}],"v":"5.6.3","fr":50,"op":109,"ip":50,"assets":[]}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment