Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
carrotech
doodle
提交
fe585bde
D
doodle
项目概览
carrotech
/
doodle
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
doodle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fe585bde
编写于
1月 18, 2019
作者:
H
huangziwei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
放大镜模式下增加全图预览的功能
上级
1811916d
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
75 addition
and
7 deletion
+75
-7
changes.md
changes.md
+5
-2
doodle/src/main/java/cn/hzw/doodle/DoodleView.java
doodle/src/main/java/cn/hzw/doodle/DoodleView.java
+69
-4
doodle/src/main/res/drawable-xxhdpi/doodle_ic_mosaic.png
doodle/src/main/res/drawable-xxhdpi/doodle_ic_mosaic.png
+0
-0
doodle/src/main/res/layout/doodle_layout.xml
doodle/src/main/res/layout/doodle_layout.xml
+1
-1
未找到文件。
changes.md
浏览文件 @
fe585bde
### V5.4
*
优化交互逻辑
*
支持左旋转
\ No newline at end of file
*
IDoodleItem支持缩放功能
*
放大镜模式下增加全图预览的功能
*
增加新的画笔:马赛克
*
支持左旋转
*
优化交互逻辑
\ No newline at end of file
doodle/src/main/java/cn/hzw/doodle/DoodleView.java
浏览文件 @
fe585bde
...
...
@@ -13,8 +13,6 @@ import android.os.Looper;
import
android.view.MotionEvent
;
import
android.view.View
;
import
junit.framework.Assert
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
...
...
@@ -30,6 +28,7 @@ import cn.hzw.doodle.core.IDoodleShape;
import
cn.hzw.doodle.core.IDoodleTouchDetector
;
import
static
cn
.
hzw
.
doodle
.
util
.
DrawUtil
.
drawCircle
;
import
static
cn
.
hzw
.
doodle
.
util
.
DrawUtil
.
drawRect
;
import
static
cn
.
hzw
.
doodle
.
util
.
DrawUtil
.
rotatePoint
;
/**
...
...
@@ -79,11 +78,12 @@ public class DoodleView extends View implements IDoodle {
private
float
mTouchX
,
mTouchY
;
private
boolean
mEnableZoomer
=
false
;
// 放大镜功能
private
boolean
mEnableOverview
=
true
;
// 全图预览功能,建立在放大镜功能开启的前提下
private
float
mLastZoomerY
;
private
float
mZoomerRadius
;
private
Path
mZoomerPath
;
private
float
mZoomerScale
=
0
;
// 放大镜的倍数
private
Paint
mZooomerPaint
;
private
Paint
mZooomerPaint
,
mZoomerTouchPaint
;
private
int
mZoomerHorizonX
;
// 放大器的位置的x坐标,使其水平居中
private
boolean
mIsScrollingDoodle
=
false
;
// 是否正在滑动,只要用于标志触摸时才显示放大镜
...
...
@@ -139,6 +139,12 @@ public class DoodleView extends View implements IDoodle {
mZooomerPaint
.
setStrokeCap
(
Paint
.
Cap
.
ROUND
);
// 圆滑
mZooomerPaint
.
setStrokeWidth
(
Util
.
dp2px
(
getContext
(),
10
));
mZoomerTouchPaint
=
new
Paint
();
mZoomerTouchPaint
.
setStyle
(
Paint
.
Style
.
STROKE
);
mZoomerTouchPaint
.
setAntiAlias
(
true
);
mZoomerTouchPaint
.
setStrokeJoin
(
Paint
.
Join
.
ROUND
);
mZoomerTouchPaint
.
setStrokeCap
(
Paint
.
Cap
.
ROUND
);
// 圆滑
mDefaultTouchDetector
=
defaultDetector
;
mInner
=
new
DoodleViewInner
();
...
...
@@ -311,7 +317,9 @@ public class DoodleView extends View implements IDoodle {
if
(
mIsScrollingDoodle
&&
mEnableZoomer
&&
mZoomerScale
>
0
)
{
//启用放大镜
canvas
.
save
();
if
(
mTouchY
<=
mZoomerRadius
*
2
)
{
// 在放大镜的范围内, 把放大镜仿制底部
float
unitSize
=
getUnitSize
();
if
(
mTouchY
<=
mZoomerRadius
*
2
)
{
// 在放大镜的范围内, 把放大镜放在底部
mLastZoomerY
=
getHeight
()
-
mZoomerRadius
*
2
;
}
else
if
(
mTouchY
>=
getHeight
()
-
mZoomerRadius
*
2
)
{
mLastZoomerY
=
0
;
...
...
@@ -327,11 +335,52 @@ public class DoodleView extends View implements IDoodle {
// draw inner
canvas
.
rotate
(
mDoodleRotateDegree
,
getWidth
()
/
2
,
getHeight
()
/
2
);
mInner
.
onDraw
(
canvas
);
// 触摸点
float
left
=
getAllTranX
();
float
top
=
getAllTranY
();
// 画布和图片共用一个坐标系,只需要处理屏幕坐标系到图片(画布)坐标系的映射关系
canvas
.
translate
(
left
,
top
);
// 偏移画布
scale
=
getAllScale
();
canvas
.
scale
(
scale
,
scale
);
// 缩放画布
mZoomerTouchPaint
.
setStrokeWidth
(
getUnitSize
());
mZoomerTouchPaint
.
setColor
(
0xaa000000
);
drawCircle
(
canvas
,
toX
(
mTouchX
),
toY
(
mTouchY
),
mSize
/
2
,
mZoomerTouchPaint
);
mZoomerTouchPaint
.
setColor
(
0xaaffffff
);
drawCircle
(
canvas
,
toX
(
mTouchX
),
toY
(
mTouchY
),
mSize
/
2
-
unitSize
/
4
,
mZoomerTouchPaint
);
canvas
.
restore
();
// 画放大器的边框
drawCircle
(
canvas
,
mZoomerRadius
,
mZoomerRadius
,
mZoomerRadius
,
mZooomerPaint
);
canvas
.
restore
();
// overview
canvas
.
save
();
canvas
.
translate
(
mZoomerHorizonX
,
mLastZoomerY
);
scale
=
(
mZoomerRadius
/
2
)
/
getWidth
();
canvas
.
scale
(
scale
,
scale
);
float
strokeWidth
=
1
/
scale
;
canvas
.
clipRect
(-
strokeWidth
,
-
strokeWidth
,
getWidth
()
+
strokeWidth
,
getHeight
()
+
strokeWidth
);
canvas
.
drawColor
(
0x88888888
);
canvas
.
save
();
canvas
.
rotate
(
mDoodleRotateDegree
,
getWidth
()
/
2
,
getHeight
()
/
2
);
float
tempScale
=
mScale
;
float
tempTransX
=
mTransX
;
float
tempTransY
=
mTransY
;
mScale
=
1
;
mTransX
=
mTransY
=
0
;
mInner
.
onDraw
(
canvas
);
mScale
=
tempScale
;
mTransX
=
tempTransX
;
mTransY
=
tempTransY
;
canvas
.
restore
();
mZoomerTouchPaint
.
setStrokeWidth
(
strokeWidth
);
mZoomerTouchPaint
.
setColor
(
0xaa000000
);
drawRect
(
canvas
,
0
,
0
,
getWidth
(),
getHeight
(),
mZoomerTouchPaint
);
mZoomerTouchPaint
.
setColor
(
0xaaffffff
);
drawRect
(
canvas
,
strokeWidth
,
strokeWidth
,
getWidth
()
-
strokeWidth
,
getHeight
()
-
strokeWidth
,
mZoomerTouchPaint
);
canvas
.
restore
();
}
}
...
...
@@ -837,6 +886,22 @@ public class DoodleView extends View implements IDoodle {
return
mEnableZoomer
;
}
/**
* 设置是否开启全图预览功能,开启后可以在放大镜功能下显示全图涂鸦
* @param enableOverview
*/
public
void
enableOverview
(
boolean
enableOverview
)
{
mEnableOverview
=
enableOverview
;
}
/**
* 是否开启全图预览功能
* @return
*/
public
boolean
isEnableOverview
()
{
return
mEnableOverview
;
}
/**
* 是否正在滚动涂鸦,只要用于标志触摸时才显示放大镜
*
...
...
doodle/src/main/res/drawable-xxhdpi/doodle_ic_mosaic.png
0 → 100644
浏览文件 @
fe585bde
3.8 KB
doodle/src/main/res/layout/doodle_layout.xml
浏览文件 @
fe585bde
...
...
@@ -63,7 +63,7 @@
android:background=
"@drawable/doodle_btn_effect_round"
android:onClick=
"onClick"
android:scaleType=
"centerInside"
android:src=
"@drawable/doodle_ic_
texture
"
android:src=
"@drawable/doodle_ic_
mosaic
"
android:visibility=
"visible"
/>
<ImageView
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录