android.view.SurfaceHolder#lockCanvas ( )源码实例Demo

下面列出了android.view.SurfaceHolder#lockCanvas ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

private synchronized void drawFrame() {
  final SurfaceHolder holder = getSurfaceHolder();

  if (holder != null && holder.getSurface().isValid()) {
    Canvas canvas = null;
    try {
      canvas = holder.lockCanvas();
      if (canvas != null) {
        // Draw on the Canvas!
      }
    } finally {
      if (canvas != null && holder != null)
        holder.unlockCanvasAndPost(canvas);
    }

    // Schedule the next frame
    handler.removeCallbacks(drawSurface);
  }
  handler.postDelayed(drawSurface, 1000 / FPS);
}
 
源代码2 项目: homescreenarcade   文件: BlockDropWallpaper.java
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    super.onSurfaceChanged(holder, format, width, height);
    if (DOLOG)
        Log.d(TAG, "onSurfaceChanged: width = [" + width + "], height = [" + height + "]");

    display = new Display(BlockDropWallpaper.this);

    if (height > width) {
        scale = (float) width / (float) height;
        yCenter = height / 2f;
    } else {
        scale = 0.8f;
        yCenter = (height / scale) / (2f * scale);
    }
    xCenter = width / 2f;

    if (getState() != STATE_PAUSED) {
        // Manually redraw with the new dimensions (it won't redraw automatically when paused)
        Canvas canvas = holder.lockCanvas();
        draw(canvas);
        holder.unlockCanvasAndPost(canvas);
    }
}
 
源代码3 项目: Asteroid   文件: BackgroundService.java
private void draw(SurfaceHolder holder) {
    if (holder == null || !holder.getSurface().isValid())
        return;

    Canvas canvas;
    try {
        canvas = holder.lockCanvas();
        if (canvas == null) return;
    } catch (Exception e) {
        return;
    }

    canvas.drawColor(Color.BLACK);

    background.draw(canvas, particleSpeed);

    holder.unlockCanvasAndPost(canvas);

    handler.removeCallbacks(runnable);
    handler.postDelayed(runnable, 10);
}
 
源代码4 项目: codeexamples-android   文件: MyWallpaperService.java
private void draw() {
	SurfaceHolder holder = getSurfaceHolder();
	Canvas canvas = null;
	try {
		canvas = holder.lockCanvas();
		if (canvas != null) {
			if (circles.size() >= maxNumber) {
				circles.clear();
			}
			int x = (int) (width * Math.random());
			int y = (int) (height * Math.random());
			circles.add(new MyPoint(String.valueOf(circles.size() + 1),
					x, y));
			drawCircles(canvas, circles);
		}
	} finally {
		if (canvas != null)
			holder.unlockCanvasAndPost(canvas);
	}
	handler.removeCallbacks(drawRunner);
	if (visible) {
		handler.postDelayed(drawRunner, 5000);
	}
}
 
源代码5 项目: camera-ruler   文件: ImageSurface.java
@SuppressLint("WrongCall")
@Override
public void surfaceCreated(SurfaceHolder holder) {
    Canvas canvas = null;
    try {
        canvas = holder.lockCanvas(null);
        synchronized (holder) {
            onDraw(canvas);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if (canvas != null) {
            holder.unlockCanvasAndPost(canvas);
        }
    }
}
 
源代码6 项目: meter   文件: MeterWallpaper.java
/**
 * Draw function doing the context locking and rendering
 */
private void draw() {
    if(mDrawer == null) return;

    // Ask the drawer if wants to draw in this frame
    if(mDrawer.shouldDraw()) {
        SurfaceHolder holder = getSurfaceHolder();
        Canvas c = null;
        try {
            // Lock the drawing canvas
            c = holder.lockCanvas();
            if (c != null) {
                // Let the drawer render to the canvas
                mDrawer.draw(c);
            }
        } finally {
            if (c != null) holder.unlockCanvasAndPost(c);
        }
    }
    mHandler.removeCallbacks(mUpdateDisplay);
    if (mVisible) {
        // Wait one frame, and redraw
        mHandler.postDelayed(mUpdateDisplay, 33);
    }
}
 
源代码7 项目: Android-ScratchOutView   文件: ScratchOutView.java
private void invalidSurfaceView() {
    Canvas canvas = null;
    SurfaceHolder surfaceHolder = getHolder();
    try {
        canvas = surfaceHolder.lockCanvas(null);
        if (canvas != null) {
            draw(canvas);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    } finally {
        if (canvas != null) {
            surfaceHolder.unlockCanvasAndPost(canvas);
        }
    }
}
 
private void draw() {
	SurfaceHolder holder = getSurfaceHolder();
	Canvas canvas = null;
	try {
		canvas = holder.lockCanvas();
		if (canvas != null) {
			draw(canvas);
		}
	} finally {
		if (canvas != null)
			holder.unlockCanvasAndPost(canvas);
	}

	handler.removeCallbacks(drawRunner);

	if (visible) {
		handler.postDelayed(drawRunner, 200);
	}
}
 
源代码9 项目: codeexamples-android   文件: MyWallpaperService.java
@Override
public void onTouchEvent(MotionEvent event) {
	if (touchEnabled) {

		float x = event.getX();
		float y = event.getY();
		SurfaceHolder holder = getSurfaceHolder();
		Canvas canvas = null;
		try {
			canvas = holder.lockCanvas();
			if (canvas != null) {
				canvas.drawColor(Color.BLACK);
				circles.clear();
				circles.add(new MyPoint(
						String.valueOf(circles.size() + 1), x, y));
				drawCircles(canvas, circles);

			}
		} finally {
			if (canvas != null)
				holder.unlockCanvasAndPost(canvas);
		}
		super.onTouchEvent(event);
	}
}
 
源代码10 项目: JPPF   文件: FractalSurfaceView.java
@Override
public void run() {
  try {
    while (!stopped.get()) {
      if (!queue.isEmpty() || firstDraw.get()) {
        SurfaceHolder holder = getHolder();
        if (holder != null) {
          Canvas canvas = null;
          try {
            canvas = holder.lockCanvas();
            synchronized(holder) {
              doDraw(canvas);
            }
          } finally {
            if (canvas != null) holder.unlockCanvasAndPost(canvas);
          }
        }
      } else {
        synchronized(this) {
          wait(100L);
        }
      }
    }
  } catch(Exception e) {
    Log.e(LOG_TAG, "Exception in ViewThread.run()", e);
  }
}
 
源代码11 项目: DanDanPlayForAndroid   文件: DanmakuSurfaceView.java
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    isSurfaceCreated = true;
    Canvas canvas = surfaceHolder.lockCanvas();
    if (canvas != null) {
        DrawHelper.clearCanvas(canvas);
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
}
 
源代码12 项目: FastAndroid   文件: FaceRecognizeView.java
/**
 * 画控件
 */
private void drawView() {
    synchronized (mSync) {
        Canvas canvas = null;
        SurfaceHolder holder = null;
        try {
            holder = getHolder();
            if (holder == null || !holder.getSurface().isValid()) return;
            //获得canvas对象
            canvas = holder.lockCanvas();
            if (canvas == null) return;
            //清除画布上面里面的内容
            canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
            //绘制画布内容
            drawContent(canvas);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (holder != null && canvas != null) {
                //释放canvas锁,并且显示视图
                try {
                    holder.unlockCanvasAndPost(canvas);
                } catch (IllegalArgumentException e2) {
                    e2.printStackTrace();
                }
            }
        }
    }
}
 
源代码13 项目: FastAndroid   文件: FaceRegisterView.java
/**
 * 画控件
 */
private void drawView() {
    synchronized (mSync) {
        Canvas canvas = null;
        SurfaceHolder holder = null;
        try {
            holder = getHolder();
            if (holder == null || !holder.getSurface().isValid()) return;
            //获得canvas对象
            canvas = holder.lockCanvas();
            if (canvas == null) return;
            //清除画布上面里面的内容
            canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
            //绘制画布内容
            drawContent(canvas);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (holder != null && canvas != null) {
                //释放canvas锁,并且显示视图
                try {
                    holder.unlockCanvasAndPost(canvas);
                } catch (IllegalArgumentException e2) {
                    e2.printStackTrace();
                }
            }
        }
    }
}
 
源代码14 项目: letv   文件: DanmakuSurfaceView.java
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    this.isSurfaceCreated = true;
    Canvas canvas = surfaceHolder.lockCanvas();
    if (canvas != null) {
        DrawHelper.clearCanvas(canvas);
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
}
 
源代码15 项目: LiveWallpaper   文件: LiveWallpaperView.java
private void drawSurfaceView(SurfaceHolder holder) {
    if (this.mNextBitmap != null && !this.mNextBitmap.isRecycled()) {
        Canvas localCanvas = holder.lockCanvas();
        if (localCanvas != null) {
            Rect rect = new Rect();
            rect.left = rect.top = 0;
            rect.bottom = localCanvas.getHeight();
            rect.right = localCanvas.getWidth();
            localCanvas.drawBitmap(this.mNextBitmap, null, rect, this.mPaint);
            holder.unlockCanvasAndPost(localCanvas);
        }
    }
}
 
private void draw(SurfaceHolder holder) {
    this.mDrawRequested = false;
    Canvas canvas = holder.lockCanvas();
    if (canvas == null) {
        return;
    }
    try {
        onDraw(canvas, holder.getSurfaceFrame());
    } finally {
        holder.unlockCanvasAndPost(canvas);
    }
}
 
源代码17 项目: drip-steps   文件: DripWallpaperService.java
private void draw() {
	SurfaceHolder holder = getSurfaceHolder();
	Canvas canvas = null;
	try {
		// redrawEverything means that the whole screen is dirty, reset all params and redraw everything
		if (redrawEverything) {
			initDimensParam(width, height);
			canvas = holder.lockCanvas();
		} else {
			canvas = holder.lockCanvas(textRect);
		}
		if (canvas != null) {
			draw(canvas);
		}
	} finally {
		if (canvas != null) {
			try {
				holder.unlockCanvasAndPost(canvas);
			} catch (Exception ignore) {
			}
		}
	}

	if (visible) {
		doFrame();
	}
}
 
源代码18 项目: BlueBoard   文件: DanmakuSurfaceView.java
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
    isSurfaceCreated = true;
    Canvas canvas = surfaceHolder.lockCanvas();
    if (canvas != null) {
        DrawHelper.clearCanvas(canvas);
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
}
 
源代码19 项目: brailleback   文件: SearchView.java
@Override
public void invalidate() {
    super.invalidate();

    final SurfaceHolder holder = mHolder;
    if (holder == null) {
        return;
    }

    final Canvas canvas = holder.lockCanvas();
    if (canvas == null) {
        return;
    }

    // Clear the canvas.
    canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);

    if (getVisibility() != View.VISIBLE) {
        holder.unlockCanvasAndPost(canvas);
        return;
    }

    final int width = getWidth();
    final int height = getHeight();

    // Draw the pretty gradient background.
    mGradientBackground.setBounds(0, 0, width, height);
    mGradientBackground.draw(canvas);

    Paint paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setStyle(Style.FILL);
    paint.setTextAlign(Align.CENTER);
    paint.setTextSize(mContext.getResources().getDimensionPixelSize(
            R.dimen.search_text_font_size));
    canvas.drawText(
            mContext.getString(R.string.search_dialog_label, mQueryText),
            width / 2.0f,
            height / 2.0f,
            paint);

    holder.unlockCanvasAndPost(canvas);
}
 
源代码20 项目: IndicatorBox   文件: BounceFreeBar.java
@Override
public void surfaceCreated(SurfaceHolder holder) {
    Canvas c = holder.lockCanvas();
    draw(c);
    holder.unlockCanvasAndPost(c);
}