我正在尝试使用透明的surefaceView创建一个特定的绘图程序,以及一个由自定义位图制作的画笔。 我在这个网站上寻找答案但找不到我需要的东西。
由于run方法的while循环,我在屏幕上绘制的位图不停闪烁。看起来程序正在无限地绘制相同的位图,这导致了这种闪烁。
我正在考虑将每个画笔笔划保存到event.getAction()==MotionEvent.ACTION_UP
作为单独的位图。但是我在这方面遇到了麻烦。
这是我的代码,我很感激任何修复这个闪烁问题的帮助!
public class SurfaceMyPaint extends SurfaceView implements Runnable {
Thread t;
SurfaceHolder holder;
Bitmap brush;
boolean isItOk = false;
public SurfaceMyPaint(Context context)
{
super(context);
holder = getHolder();
initial();
}
public SurfaceMyPaint(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
holder = getHolder();
initial();
// TODO Auto-generated constructor stub
}
public SurfaceMyPaint(Context context, AttributeSet attrs)
{
super(context, attrs);
holder = getHolder();
initial();
// TODO Auto-generated constructor stub
}
public void initial()
{
brush= BitmapFactory.decodeResource(getResources(), R.drawable.brush2);
}
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction()== MotionEvent.ACTION_DOWN)
{
x= event.getX();
y= event.getY();
}
if(event.getAction()== MotionEvent.ACTION_MOVE)
{
x = event.getX();
y= event.getY();
Canvas c= holder.lockCanvas();
c.drawBitmap(brush,x- (brush.getWidth() / 2),y- (brush.getWidth() / 2),null);
holder.unlockCanvasAndPost(c);
}
return true;
}
public void run()
{
while (isItOk == true)
{
if (!holder.getSurface().isValid())
continue;
}
}
public void pause(){
isItOk = false;
while (true){
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
t=null;
}
public void resume(){
isItOk = true;
t = new Thread(this);
t.start();
}
}
答案 0 :(得分:0)
好的,我找到了一个解决方案,我会在这里发布,以帮助其他人。帮助我的This is the link,这是我需要的代码示例。 (很难找到)。
public void run() {
Canvas canvas = null;
while (_run){
try{
canvas = mSurfaceHolder.lockCanvas(null);
if(mBitmap == null){
mBitmap = Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);;
}
final Canvas c = new Canvas (mBitmap);
c.drawColor(0, PorterDuff.Mode.CLEAR);
commandManager.executeAll(c);
canvas.drawBitmap (mBitmap, 0, 0,null);
} finally {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}