Skia翻页效果的改写感谢何明桂的分享

何明桂: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

 
2011-11-22/15:00:11
在所有使用GradientDrawable的地方用SkShader,
还不会设置CreateLinear的参数,胡来弄了个,效果很差,关键是速度奇慢。不知道会不会悲剧。
	所有的地方都使用这个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/

原文地址:https://www.cnblogs.com/ezhong/p/2257040.html