当前位置:编程学习 > wap >>

Surface view 锯齿问题这么严重啊!

相同的图片缩小到屏幕大小后,在view里显示很锐利的,但用SurfaceView显示就惨不忍睹 
核心代码都相同,只是容器不同而已,大侠来解惑下。附演示代码 

SurfaceView 核心代码: 

           public void doDraw(Canvas canvas) { 
Paint p = new Paint(); 
p.setAntiAlias(true);// <<====== Anti Alias 
p.setColor(Color.WHITE); 
canvas.drawColor(Color.BLACK); 
Matrix mMatrix=new Matrix(); 
mMatrix.postScale(0.34f, 0.34f); 
canvas.drawBitmap(mBitmap, mMatrix, p); 
canvas.drawText("Surface View Anti alias", 100, 300, p); 


View 核心代码: 

@Override 
protected void onDraw(Canvas canvas) { 
Paint p = new Paint(); 
p.setAntiAlias(true);// <<====== Anti Alias 
p.setColor(Color.WHITE); 
canvas.drawColor(Color.BLACK); 
Matrix mMatrix = new Matrix(); 
mMatrix.postScale(0.34f, 0.34f); 
canvas.drawBitmap(mBitmap, mMatrix, p); 
canvas.drawText("View Anti alias", 100, 300, p); 


两种效果差距甚大,到底surfaceview下怎么抗锯齿呢? 

附源代码 
http://sharpidea.co.cc/GifViewTest.rar

--------------------编程问答-------------------- Surface View 和 一般的View是不太一样的。

Surface View是有buffer的,一般画图直接画到这个buffer上。

一般的view是没有这个buffer的,是share window的viewRoot(DecroView)的buffer。

详细代码没仔细研究过,可能一般view的事件循环路径稍微长一些,有些许不同吧。 --------------------编程问答-------------------- 更新下代码:

相同的图片缩小到屏幕大小后,在view里显示很锐利的,但用SurfaceView显示就惨不忍睹
核心代码都相同,只是容器不同而已,大侠来解惑下。附演示代码

SurfaceView 核心代码:


	public void doDraw(Canvas canvas) {
Paint p = new Paint();
p.setColor(Color.WHITE);
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));
canvas.drawColor(Color.BLACK);
Matrix mMatrix = new Matrix();
mMatrix.postScale(0.34f, 0.34f);
canvas.drawBitmap(mBitmap, mMatrix, p);
canvas.drawText("Surface View Anti alias", 100, 300, p);
}


View 核心代码:

	@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setColor(Color.WHITE);
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));  
canvas.drawColor(Color.BLACK);
Matrix mMatrix = new Matrix();
mMatrix.postScale(0.34f, 0.34f);
canvas.drawBitmap(mBitmap, mMatrix, p);
canvas.drawText("View Anti alias", 100, 300, p);
}



两种效果差距甚大,到底surfaceview下怎么抗锯齿呢?
附源代码  
http://sharpidea.co.cc/GifViewTest.rar
--------------------编程问答-------------------- 测试过,因为surfaceview 有独立的buffer,这个缓冲的话,如果必要的话,要手动清理一下canvas区域的内容。简单的做法:canvas.drawColor(Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);出现锯齿,即使绘制同一张图也会出现,应该是图的像素点,在实际转化成屏幕像素时,float计算时两次情况不一致。
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,