灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2217回复:0

Android RoboGuice使用指南(8):Provider Bindings

楼主#
更多 发布于:2012-09-06 13:56


如果@Provides方法很复杂的话,可以将这些代码移动到单独的类中。这个类需要实现Guice的Provider 接口,该接口定义如下
[java] public interface Provider<T> {
T get();
}
public interface Provider<T> {
T get();
}

为一个generic 接口。
本例我们定义一个PathProvider,用于返回一个Path对象:
[java] public class PathProvider implements Provider<Path>{
  
private String pathdata
= "M 60 20 Q -40 70 60 120 Q 160 70 60 20 z";
@Override
public Path get() {
return Path.fromString(pathdata);
}
  
}
public class PathProvider implements Provider<Path>{

private String pathdata
= "M 60 20 Q -40 70 60 120 Q 160 70 60 20 z";
@Override
public Path get() {
return Path.fromString(pathdata);
}

}
然后在Module中定义从Path类到Provider的绑定:
[java] bind(Path.class).toProvider(PathProvider.class);
bind(Path.class).toProvider(PathProvider.class);
然后使用绘制这个Path:
[java] public class ProviderBindingsDemo extends Graphics2DActivity{
  
@Inject Path path;
  
protected void drawImage(){
  
AffineTransform mat1;
  
// Colors  
Color redColor = new Color(0x96ff0000, true);
Color greenColor = new Color(0xff00ff00);
Color blueColor = new Color(0x750000ff, true);
  
mat1 = new AffineTransform();
mat1.translate(30, 40);
mat1.rotate(-30 * Math.PI / 180.0);
  
// Clear the canvas with white color.  
graphics2D.clear(Color.WHITE);
  
graphics2D.setAffineTransform(new AffineTransform());
SolidBrush brush = new SolidBrush(greenColor);
graphics2D.fill(brush, path);
graphics2D.setAffineTransform(mat1);
  
brush = new SolidBrush(blueColor);
com.mapdigit.drawing.Pen pen
= new com.mapdigit.drawing.Pen(redColor, 5);
graphics2D.setPenAndBrush(pen, brush);
graphics2D.draw(null, path);
graphics2D.fill(null, path);
  
}
  
}




喜欢0 评分0
游客

返回顶部