[OK]を編集しますそれを言います。ここ
これはonDraw(に描画するための私のコードです)
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
canvas.drawBitmap(MoveImageTestActivity.bmp, 0,0,null);
if(mScaleFactor!=1.f)
canvas.restore();
if(isDrawing)
canvas.drawPath(tempPath,get_paint());
if(mScaleFactor==1.f)
canvas.restore();
}
キャンバスを復元するためのスケールファクタの値をチェックする必要があります。スケールファクター値がデフォルトで1.fで、画像が動いてから描画ライン/パスの後に復元された場合、スケールファクターが1.f(デフォルト)に等しくなければ、最初にキャンバスを復元し、ライン/指タッチの描画時間を使用してパス。ここ
は私onTouch()コード
@Override
public boolean onTouchEvent(MotionEvent ev) {
mScaleDetector.onTouchEvent(ev);
final int action = ev.getAction();
switch (action & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
if(isDrawing){
float dx = ev.getX();
float dy = ev.getY();;
if(mScaleFactor==1.f){
dx = ev.getX() - mPosX;
dy = ev.getY() - mPosY;
}
tempPath = new Path();
tempPath.moveTo(dx,dy);
}else{
mLastTouchX = x;
mLastTouchY = y;
// Save the ID of this pointer
mActivePointerId = ev.getPointerId(0);
}
break;
}
case MotionEvent.ACTION_MOVE: {
// Find the index of the active pointer and fetch its position
if(isDrawing){
float dx = ev.getX();
float dy = ev.getY();;
if(mScaleFactor==1.f){
dx = ev.getX() - mPosX;
dy = ev.getY() - mPosY;
}
tempPath.lineTo(dx,dy);
}else{
final int pointerIndex = ev.findPointerIndex(mActivePointerId);
final float x = ev.getX(pointerIndex);
final float y = ev.getY(pointerIndex);
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
mPosX += dx;
mPosY += dy;
mLastTouchX = x;
mLastTouchY = y;
}
break;
}
case MotionEvent.ACTION_UP: {
points.clear();
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
if(!isDrawing){
// Extract the index of the pointer that left the touch sensor
final int pointerIndex = (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = ev.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
// This was our active pointer going up. Choose a new
// active pointer and adjust accordingly.
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mLastTouchX = ev.getX(newPointerIndex);
mLastTouchY = ev.getY(newPointerIndex);
mActivePointerId = ev.getPointerId(newPointerIndex);
}
}
break;
}
}
invalidate();
return true;
}
uはウルビュークラスを投稿することができますか。? – kyogs
はい、表示クラスを投稿してください。同じ問題に悩まされた! –