前段时间根据朋友的一个提议做了个翻页动画。效果跟水果忍者切割相似。如图
效果过程大致如下:
1)根据手势痕迹将当前图片分割为两部分;
2)将分割后的图片拉开一段距离,并适度放大图片,以模拟向屏幕外弹起效果,同时露出底层图片;
3)错位移动分割后的图片;
首先遇到的问题是如何对图片进行分割。我选择采用canvas.clipPath来实现;采用这种方法就要先确定PATH中各个节点的坐标;
起初我尝试利用分割线与图片边的交点,以及图片的顶点来确定Path;
如下图:
通过观察,却发现交点可以落在图片任意两条不同的边上,而且落点不同与其构成Path的顶点也不同,情况复杂,于是我果断放弃,另谋他路。一番尝试后,我决定采用以下方式;
设mHW为图片对角线的斜率,mSlope分割线的斜率;;
将切割情况分为,mSlope大于还是小于mHW两种情况进行处理;
先看mSlope大于mHW的情况,如图:
点mDown 和mUp分别表示手指按下和弹起时的位置,两点所在直线即为分割线。分割线与x=-mWidth,x=2mWidth分别交于mX0 和mXw;显然两点坐标可以轻松得到:
private void calcPoints() {
mSlope = (mDown.y - mUp.y) / (mDown.x - mUp.x);
mX0.x = -mWidth;
mX0.y = (-mWidth - mUp.x) * mSlope + mUp.y;
mXw.x = 2 * mWidth;
mXw.y = mSlope * (2 * mWidth - mUp.x) + mUp.y;
}
这样,被分割的两部分路径就总是可以用图中Part1,Part2 两个三角形确定。
Part1的路径为:
if (Math.abs(mSlope) > mHW) {
if (mSlope < 0) {
path.moveTo(-mWidth, mXw.y);
path.lineTo(mXw.x, mXw.y);
path.lineTo(mX0.x, mX0.y);
path.close();
} else {
path.moveTo(-mWidth, mXw.y);
path.lineTo(mX0.x, mX0.y);
path.lineTo(mXw.x, mXw.y);
path.close();
}
}
Part2的路径为:
if (Math.abs(mSlope) > mHW) {
if (mSlope < 0) {
path.moveTo(2 * mWidth, mX0.y);
path.lineTo(mXw.x, mXw.y);
path.lineTo(mX0.x, mX0.y);
path.close();
} else {
path.moveTo(2 * mWidth, mX0.y);
path.lineTo(mX0.x, mX0.y);
path.lineTo(mXw.x, mXw.y);
path.close();
}
}
而当切割线斜率小于mSlope时,情况与此相似,就不一一赘述了。
- 大小: 607.3 KB
- 大小: 28.1 KB
- 描述: p1-1
- 大小: 19.2 KB
- 大小: 39.2 KB
分享到:
相关推荐
在Android应用开发中,实现真实的书籍翻页效果是一项常见的需求,尤其在电子阅读器或教育类应用中。这个“Android真实书籍翻页效果.rar”压缩包包含了一个实现此类效果的源码示例,旨在帮助开发者理解和掌握这一技术...
在这个"易语言Example3源码"中,我们关注的是"智圆行方翻页效果模块",这是一个实现图形用户界面(GUI)动态翻页效果的代码实现。 "智圆行方"在这里可能是指模块的设计理念,寓意智慧圆满,行动方正,而"翻页效果...
上下左右翻页效果通常涉及到图片的切割、变形和动画。在Delphi中,我们可以使用TBitmap对象来操作图像,将图片切割成多个部分,然后分别对这些部分进行变换。例如,向上翻页效果可能需要将图片底部的部分沿着垂直轴...
这个翻页效果可能是通过改变数字的透明度、位置或者大小来模拟翻页的过程,营造出一种数字在时间流逝中翻转的视觉效果。 在CSS3中,还有`transition`属性,它可以平滑地过渡一个或多个CSS属性值,这可能被用来处理...
为了实现动态的翻页效果,通常还需要一个定时器或者`ValueAnimator`来改变`degreeZ`的值,使其随着时间推移逐渐变化,这样切割线就会连续地移动,形成平滑的翻页动画。 8. **完整代码**: 完整的实现可能包括对`...
对于数字翻页效果,主要会用到Image组件来创建翻页的背景和边角,以及可能的Text组件来显示数字内容。 3. **精灵(Sprite)和材质(Material)**:数字翻页通常需要定制的纹理图像,这些图像被切割成多个精灵,分别...
不要使用插入相册功能,因为我们需要独立操作每一张图片以实现翻页效果。第一步保持不变,不作处理,从第七页开始,将下一页的图片复制并粘贴到当前页,以此类推,直至第二页被复制到第三页,形成一个连续的序列。 ...
4. Bladewipe:类似于刀片切割屏幕,逐渐揭示下一个场景。 5. Bricks:画面被分割成小方格并逐个破碎,向上移动。 6. Bubbles:元素如同气泡般升起,形成凸起效果。 7. Bytes2:可能是一种像素化过渡,呈现数据流动...
这通常是通过CSS3的border-radius和box-shadow属性来模拟三维立体感,同时配合transform的rotateY()方法,让元素沿着Y轴翻转,形成翻页效果。这个效果可以进一步增强用户体验,使得图片翻转更加生动。 综上所述,...
1. **设计理念**:磁石书签可能源于对传统纸质书签的改进,旨在解决传统书签易丢失或翻页时滑落的问题。设计师可能考虑到磁性的特性,使得书签能够牢固吸附在书页上,不易掉落,且方便用户快速找到阅读进度。 2. **...
设计者通常会考虑如何通过科学的结构设计和材料选择,来增强书角的保护效果,同时保持书籍的整体美观性。这种装置可能包括柔软且耐用的材料,如塑料、布料或者纸板,它们能够有效地缓冲外部冲击,防止书角发生形变。...
这通常包括精密的刀具和调整机构,能够精确控制切割的角度、深度和一致性,确保每一本书的圆角都符合预设的标准。切割过程可能涉及到自动或半自动的操作,通过数字化控制,实现高效、准确的批量生产。 在设计装置...
- **翻页效果**:模拟书页翻页动画,可能使用了`transform: skew()`和`rotate()`结合,以及`clip-path`来切割形状。 - **3D旋转**:利用`transform: rotate3d()`在三维空间内旋转元素,产生立体旋转效果。 - **...
然而,在使用笔记本的过程中,我们常常会遇到一些问题,例如纸页容易滑落、不易翻页、封面容易磨损等。这些问题不仅影响了用户的使用体验,也降低了笔记本的使用寿命。因此,设计出一种既实用又美观的改进型封面,以...
4. **翻页效果**:模拟实体书翻页,适合用于相册展示。 5. **网格切换**:图片以网格形式排列,点击某一张后以放大效果展示。 6. **3D旋转**:利用CSS3的3D变换,使图片在切换时产生立体旋转效果。 7. **平移切换...
动态立体书的核心理念是打破传统阅读的二维限制,通过巧妙的结构设计和视觉效果,使读者能够通过翻页或手动操作感受到书中的角色、场景仿佛活了起来。这种设计理念旨在激发读者的想象力,增强对故事内容的理解和记忆...
1. **3D滑动效果**:在Android中,通过重写`ViewPager`或者使用第三方库如`FragmentPager`,可以实现3D翻页效果。通过改变页面之间的转场动画,模拟3D空间中的翻页,可以创建出更真实的浏览体验。这通常涉及到矩阵...
3. **工艺技术**:制作圆形角书本可能涉及到特殊的裁切技术,如圆角切割机的运用,以精确地切割出理想的弧度。此外,装订方式也会影响书本的整体结构和耐久性,如无线胶装、锁线胶装等。 4. **印刷工艺**:设计中的...