疯了,大侠来,抗锯齿,surfaceview camera下一点用都没有

使用android自带的动画机制很卡时可以考虑使用SurfaceView来实现动画 - 邓胤的家当 - ITeye技术网站
博客分类:
如果当View tree很复杂,结构很深的时候, 使用动画的时候会发现即使开了硬件加速还是有些卡,这是因为android系统自带的动画是在UI线程来处理的, 而且每次需要重绘整个View tree,虽然你可以指定重新绘制的区域,不过这样比较麻烦,
SurfaceView中View的绘制不是在UI线程中,所以可以避免上面的问题。我们只要做到SurfaceView背景能够透明就行了。在需要的地方盖一层SurfaceView, 做动画时显示出来。下面是示例代码。
package com.example.
import android.content.C
import android.content.res.R
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.M
import android.graphics.P
import android.graphics.Paint.S
import android.graphics.PixelF
import android.graphics.R
import android.util.AttributeS
import android.view.Surface.OutOfResourcesE
import android.view.SurfaceH
import android.view.SurfaceV
public class ZenClockSurface extends SurfaceView implements
SurfaceHolder.Callback {
private DrawClock drawC
public ZenClockSurface(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
getHolder().addCallback(this);
public ZenClockSurface(Context context) {
super(context);
getHolder().addCallback(this);
public ZenClockSurface(Context context, AttributeSet attrs) {
super(context, attrs);
getHolder().addCallback(this);
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
public void surfaceCreated(SurfaceHolder holder) {
drawClock = new DrawClock(getHolder(), getResources());
drawClock.setRunning(true);
drawClock.start();
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry =
drawClock.setRunning(false);
while (retry) {
drawClock.join();
} catch (InterruptedException e) {
class DrawClock extends Thread {
private boolean runFlag =
private SurfaceHolder surfaceH
public DrawClock(SurfaceHolder surfaceHolder, Resources resources) {
this.surfaceHolder = surfaceH
picture = BitmapFactory.decodeResource(resources,
R.drawable.ic_launcher);
matrix = new Matrix();
this.painter = new Paint();
this.painter.setStyle(Paint.Style.FILL);
this.painter.setAntiAlias(true);
this.painter.setFilterBitmap(true);
public void setRunning(boolean run) {
public void run() {
while (runFlag) {
matrix.preRotate(1.0f, picture.getWidth() / 2,
picture.getHeight() / 2);
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
float[] f = new float[9];
matrix.getValues(f);
float y = f[Matrix.MTRANS_Y];
matrix.postTranslate(0, 10);
canvas.drawColor(0, android.graphics.PorterDuff.Mode.CLEAR);
canvas.drawBitmap(picture, matrix, this.painter);
float[] f1 = new float[9];
matrix.getValues(f1);
float y1 = f1[Matrix.MTRANS_Y];
if (y1 &= 800) {
matrix.setTranslate(0, 0);
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
调用的activity
package com.example.
import android.app.A
import android.graphics.PixelF
import android.os.B
import android.view.SurfaceH
import android.view.V
import android.view.ViewG
import android.webkit.WebV
import android.widget.LinearL
import android.widget.ScrollV
public class MyActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ZenClockSurface sfvTrack = (ZenClockSurface)findViewById(R.id.zenClockSurface1);
sfvTrack.setZOrderOnTop(true);
// necessary
SurfaceHolder sfhTrack = sfvTrack.getHolder();
sfhTrack.setFormat(PixelFormat.TRANSLUCENT);
WebView webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("");
布局。
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/red"
android:orientation="vertical" &
&WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/webview"&&/WebView&
&com.example.myapp.ZenClockSurface
android:id="@+id/zenClockSurface1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"/&
&/RelativeLayout&
使SurfaceView透明是下面这几句
&&&&&&& ZenClockSurface sfvTrack = (ZenClockSurface)findViewById(R.id.zenClockSurface1);
&&&&&&& sfvTrack.setZOrderOnTop(true);&&& // necessary
&&&&&&& SurfaceHolder sfhTrack = sfvTrack.getHolder();
&&&&&&& sfhTrack.setFormat(PixelFormat.TRANSLUCENT);
这句是清屏。&&&&&&&&&&&&&&&&&&&&&&& canvas.drawColor(0,android.graphics.PorterDuff.Mode.CLEAR);
下载次数: 98
dengyin2000
浏览: 877504 次
来自: 广州
姚瑶大坏蛋 写道我也遇到了这个,用你这个方法,导致下拉刷新不起 ...
我也遇到了这个,用你这个方法,导致下拉刷新不起作用了,你遇到过 ...
LeaderElection(String zookeeper ...
博主, 安装了一部分还是报这个错误!FAILURE: Buil ...
如何在java Web项目中开发WebService接口,地址 ...疯了!大侠来! 抗锯齿! SurfaceView 下一点用都没有_exkugs2608_天涯博客
IT技术类咨询及解决方案
今日访问:[$DayVisitCount$]
总访问量:74753
开博时间:
博客排名:21731
(33)(12)(18)(26)(83)(125)(76)
相同的图片缩小到屏幕大小后,在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 核心代码:@Overrideprotected 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下怎么抗锯齿呢?附源代码 ----------------------------------------------------
------解决方案--------------------------------------------------------可参考:,SurfaceView的有关问题&&&/android/180358.html另这里的部分程序错误异常BUG解决方案  |/java-other/172921.html  |/oracle-develop/177537.html分类: |2007年4月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。2015年8月 移动开发大版内专家分月排行榜第三2014年9月 移动开发大版内专家分月排行榜第三2014年7月 移动开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 surfaceview 的文章

 

随机推荐