Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PDF Viewer Scanner White ago
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
kuxulei
PDF Viewer Scanner White ago
Commits
941d3923
Commit
941d3923
authored
Jan 24, 2025
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
7f991049
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1413 additions
and
0 deletions
+1413
-0
BuildException.java
...fviewerscannerwhite/ui/view/guideview/BuildException.java
+25
-0
Common.java
.../base/pdfviewerscannerwhite/ui/view/guideview/Common.java
+43
-0
Component.java
...se/pdfviewerscannerwhite/ui/view/guideview/Component.java
+86
-0
Configuration.java
...dfviewerscannerwhite/ui/view/guideview/Configuration.java
+140
-0
DimenUtil.java
...se/pdfviewerscannerwhite/ui/view/guideview/DimenUtil.java
+35
-0
Guide.java
...m/base/pdfviewerscannerwhite/ui/view/guideview/Guide.java
+268
-0
GuideBuilder.java
...pdfviewerscannerwhite/ui/view/guideview/GuideBuilder.java
+363
-0
LottieComponent.java
...viewerscannerwhite/ui/view/guideview/LottieComponent.java
+42
-0
MaskView.java
...ase/pdfviewerscannerwhite/ui/view/guideview/MaskView.java
+393
-0
layout_lottie_guide.xml
app/src/main/res/layout/layout_lottie_guide.xml
+17
-0
guide_finger.json
app/src/main/res/raw/guide_finger.json
+1
-0
No files found.
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/BuildException.java
0 → 100644
View file @
941d3923
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
;
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/Common.java
0 → 100644
View file @
941d3923
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
;
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/Component.java
0 → 100644
View file @
941d3923
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
();
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/Configuration.java
0 → 100644
View file @
941d3923
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
];
}
};
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/DimenUtil.java
0 → 100644
View file @
941d3923
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
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/Guide.java
0 → 100644
View file @
941d3923
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
=
-
1
f
;
@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
;
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/GuideBuilder.java
0 → 100644
View file @
941d3923
This diff is collapsed.
Click to expand it.
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/LottieComponent.java
0 → 100644
View file @
941d3923
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
;
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/ui/view/guideview/MaskView.java
0 → 100644
View file @
941d3923
This diff is collapsed.
Click to expand it.
app/src/main/res/layout/layout_lottie_guide.xml
0 → 100644
View file @
941d3923
<?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
app/src/main/res/raw/guide_finger.json
0 → 100644
View file @
941d3923
{
"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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment