何明桂:Android 实现书籍翻页效果----完结篇 http://blog.csdn.net/hmg25/article/details/6342539
从工作开始接触的就是界面,但只是用GDI画画图片。对于一些复杂的特效,尤其像翻页这样的,感觉很无路。
看了何明桂的翻页效果原理篇后,发现自己实在是太笨了,无法将表面的现象分析成自己理解的可以实现的代码,只是一直在问怎么办。
相信很多人看过 原理篇 后,会有同样的感觉。
原理篇:http://blog.csdn.net/hmg25/article/details/6306479
星期天将何明桂的java代码 主要是PageWidget.java用C++改写了下
可以得出上图的效果。
前些天开始学习用skia,很多不懂,看到何明桂的翻页效果,移植下。
现在还有好多问题:
1.小细节,这个怎么点都是从左上角开始翻页。
2.锯齿很严重
3.最严重的,估计很难弄 ,阴影的实现,我看了下GradientDrawable这个类在android里是用java实现,不是调用的Skia的C++接口。
(不知道怎么办,打算用C++照着android里的源码写下,不知道能不能行。)
希望我能将问题解决掉,与大家分享。
2011-11-22/09:07:01
又找到一个翻页效果的例子,http://www.iteye.com/topic/1112526
这个用LinearGradient 处理阴影。LinearGradient 继承于Shader.Shader也是native
实现。
19 /*** 20 * Shader is the based class for objects that return horizontal spans of colors 21 * during drawing. A subclass of Shader is installed in a Paint calling 22 * paint.setShader(shader). After that any object (other than a bitmap) that is 23 * drawn with that paint will get its color(s) from the shader. 24 */
mypaint.setShader(LinearGradient),
之后使用mypaint绘画的对象都会使用LinearGradient
所有的地方都使用这个SkShader:
SkPoint pt[2]; pt[0].set(0,0); pt[1].set(50,50); SkColor color[] = {0x333333,0xb0333333}; mFolderShadowDrawableRL = SkGradientShader::CreateLinear(pt,color,NULL,2,SkShader::TileMode::kClamp_TileMode);
使用如下
//mBackShadowDrawable.setBounds(leftx, (int) mBezierStart1.fY, rightx,(int)(mMaxLength + mBezierStart1.fY)); //mBackShadowDrawable.draw(canvas); 改为: SkPaint paint; paint.setShader(mBackShadowDrawable); canvas->drawRectCoords(leftx, (int) mBezierStart1.fY, rightx,(int)(mMaxLength + mBezierStart1.fY),paint);
弱到不行的效果:
ezhong的博客园:http://www.cnblogs.com/ezhong/