Java 为什么Android maps compass演示为SmoothCanvas类使用委托?
在Eclipse中为Google API提供的Android MapsDemo中,他们在MapViewCompassDemo.java中创建了一个内部类Java 为什么Android maps compass演示为SmoothCanvas类使用委托?,java,android,class,delegates,demo,Java,Android,Class,Delegates,Demo,在Eclipse中为Google API提供的Android MapsDemo中,他们在MapViewCompassDemo.java中创建了一个内部类SmoothCanvas。在这个类中,重新实现每个方法并将其重新路由到Canvas的委托实例 static final class SmoothCanvas extends Canvas { Canvas delegate; private final Paint mSmooth = new Paint(Paint.FILTER
SmoothCanvas
。在这个类中,重新实现每个方法并将其重新路由到Canvas
的委托实例
static final class SmoothCanvas extends Canvas {
Canvas delegate;
private final Paint mSmooth = new Paint(Paint.FILTER_BITMAP_FLAG);
public void setBitmap(Bitmap bitmap) {
delegate.setBitmap(bitmap);
}
public void setViewport(int width, int height) {
delegate.setViewport(width, height);
}
...
在这种情况下,委托的意义是什么 在这种情况下,授权的关键点是:
private final Paint mSmooth = new Paint(Paint.FILTER_BITMAP_FLAG);
一点。过滤会影响位图转换时的采样。过滤不会影响位图中的颜色如何转换为设备像素。这取决于抖动和xfermodes
通过激活该标志,绘制位图将基本上提高其性能。在本例中,您将看到
mSmoth
用于每个drawBitmap
调用。将delegate
的值传递到dispatchDraw
。SmoothCanvas
类是delegate
的包装器。通过授权,Canvas
实现传递给dispatchDraw
完成所有繁重的工作。包装器只允许注入平滑的油漆,而不实现Canvas
的所有逻辑,但这又是如何产生使用委托的需要的呢?我想您正在回答为什么他们创建了扩展Canvas
的SmoothCanvas
类。我明白。我不明白的是,当他们已经在Canvas
类中时,为什么他们创建delegate
类型的Canvas
属性?为什么他们不只是覆盖使用Paint对象的少数方法?这样:(还有更多,但没有空间全部粘贴)静态最终类SmoothCanvas扩展画布{private final Paint mSmooth=new Paint(Paint.FILTER_BITMAP_FLAG);@override public void drawBitmap(位图位图,左侧浮动,顶部浮动,绘制){if(Paint==null){paint=mSmooth;}else{paint.setFilterBitmap(true);}super.drawBitmap(位图,左,上,绘制);}没有意识到缩进在注释中是不起作用的:委托处理的是DeSpCuDigice的参数不是画布,而是一个导数。考虑如果传入的画布已经被重写来做其他事情会发生什么:模糊位图,渲染灰度级。如果你只提供你自己重写的画布,你可能会松散功能。通过授权,你可以使用原始的对象,但需要做一些修改。
static final class SmoothCanvas extends Canvas {
Canvas delegate;
private final Paint mSmooth = new Paint(Paint.FILTER_BITMAP_FLAG);
public void setBitmap(Bitmap bitmap) {
delegate.setBitmap(bitmap);
}
public void setViewport(int width, int height) {
delegate.setViewport(width, height);
}
...