0
我上了懸停聽我的USB鼠標(使用Android開發板)。我想使用懸停偵聽器在畫布上創建一個虛擬鼠標光標,通過繪製一個形狀(讓我們說一個圓圈)並刷新它的位置,同時將鼠標懸停在畫布上。 我的問題是,當我移動鼠標時,舊的圓形圖仍然保留在畫布上,所以我得到了一個圈,而不是一個單一的移動圓。我現在使用的代碼顯然是愚蠢的(試圖用計時器延遲畫布刪除,導致性能很低)。誰能幫我這部分代碼(在上觸摸事件是工作的罰款和其他做一些事情。我只是需要hoverlistener部分)Android:在畫布上繪製「鼠標光標」。 onHoverListener
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(canvasBitmap, 0, 0, canvasPaint);
canvas.drawPath(drawPath, drawPaint);
}
//respond to touch interaction
@Override
public boolean onTouchEvent(MotionEvent event) {
float touchX = event.getX();
float touchY = event.getY();
//respond to down, move and up events
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
drawPath.moveTo(touchX, touchY);
break;
case MotionEvent.ACTION_MOVE:
drawPath.lineTo(touchX, touchY);
break;
case MotionEvent.ACTION_UP:
drawPath.lineTo(touchX, touchY);
drawCanvas.drawPath(drawPath, drawPaint);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// this code will be executed after 2 seconds
drawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
}
}, 2000);
drawPath.reset();
break;
default:
return false;
}
//redraw
invalidate();
return true;
}
private OnHoverListener ohl = new OnHoverListener() {
@Override
public boolean onHover(View v, MotionEvent ev) {
// Log.i(TAG, ev.toString());
arrow = BitmapFactory.decodeResource(getResources(),R.drawable.cross);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
// path.moveTo(eventX, eventY);
return true;
case MotionEvent.ACTION_HOVER_MOVE:
//Log.i(TAG,"hover move");
//drawCanvas.drawColor(Color.RED);
drawCanvas.drawBitmap(arrow,ev.getX(),ev.getY(),drawPaint);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// this code will be executed after 2 seconds
drawCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
}
}, 10);
return true;
case MotionEvent.ACTION_UP:
// nothing to do
return true;
}
return true;
}
};
是的,但是,我的父窗口有一個透明的視圖就是一個相機預覽窗口(camera2 API)。當我將鼠標懸停在您建議的代碼上時,預覽的幀率會下降。這是軟件還是硬件問題? – David
啓用硬件加速..修復了我認爲的問題 – David