Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 593|回复: 0

Q&A: 用surfaceView绘画时,图片越来越多问题求解

[复制链接]

该用户从未签到

发表于 2011-10-22 18:10:41 | 显示全部楼层 |阅读模式
我用SurfaceView绘图时,想让一个星星在屏幕内随机闪动,可是每动一次,星星就多一个,郁闷了
该怎么破解啊;

以下是我的代码:

package com.icss;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.Display;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;

public class CustomSurfaceView extends SurfaceView implements SurfaceHolder.Callback{

        //获surface管理器
        private SurfaceHolder sholder;
        
        private int screen_width;
        private int screen_height;
        
        //声明画布
        private Canvas canvas;
        
        //n声明一个线程
        private MyThread mythread;
        
        //获得画笔
        private Paint paint;
        //获得图片
        private Bitmap star_green;
        private Bitmap star_red;
        private Bitmap star_white;
        
        public CustomSurfaceView(Context context, AttributeSet attrs) {
                super(context, attrs);
                System.out.println("CustomSurfaceView................");
                //实例化surface
                this.sholder = this.getHolder();
                sholder.addCallback(this);
               
                //实例化线程
                mythread = new MyThread();
               
                //实例化画笔
                paint = new Paint();
                paint.setStyle(Style.STROKE);
               
                //初始化屏幕宽、高
                WindowManager manager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
                Display display = manager.getDefaultDisplay();
               
                this.screen_height = display.getHeight();
                this.screen_width = display.getWidth();
               
                //初始化图片
                star_green = BitmapFactory.decodeResource(this.getResources(), R.drawable.toolbar_backup_green);
                star_red = BitmapFactory.decodeResource(this.getResources(), R.drawable.toolbar_backup_red);
                star_white = BitmapFactory.decodeResource(this.getResources(), R.drawable.toolbar_backup_white);
        }

        @Override
        public void surfaceCreated(SurfaceHolder holder) {
                System.out.println("surfaceCreated................");
                mythread.start();
               
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                        int height) {
                System.out.println("surfaceChanged................");
                // TODO Auto-generated method stub
               
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
                System.out.println("surfaceDestroyed................");
                try {
                        mythread.join();
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
        }
        
        class MyThread extends Thread{

                @Override
                public void run() {
                        
                        
                        
                        while(true){
                                
                                float left = (float)Math.random()*screen_width;
                                float top = (float)Math.random()*screen_height;

                                canvas = sholder.lockCanvas();
                                canvas.drawBitmap(star_green, left, top, paint);

                                sholder.unlockCanvasAndPost(canvas);
                                try {
                                        sleep(500);
                                } catch (InterruptedException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                                }
                                
                                
                        }
                        
                }
               
               
        }
        

}
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 18:10:52 | 显示全部楼层

Re:Q

沙发。
应该是在绘图之前没有“清屏”。
可以参考:http://www.cmd100.com/bbs/thread-8465-1-1.html
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 06:36 , Processed in 0.347393 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表