自分で書いたのextends View
ですが、うまくいきません。目的は、赤い円をドラッグできるようにすることです。残念ながら、円はドラッグ中に振動します。つまり、スムーズに移動しません。
public class FieldView extends View {
private int cellWidth;
private int cellHeight;
private float startleft, starttop;
private float startx, starty;
private Paint paint;
public FieldView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.RED);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawOval(new RectF(
getTranslationX()-(float)cellWidth/2f,
getTranslationY() - (float)cellHeight/2f,
getTranslationX() + (float)cellWidth/2f,
getTranslationY() + (float)cellHeight/2f), paint);
}
public void setCellWidth(int value) {
this.cellWidth = value;
}
public void setCellHeight(int value) {
this.cellHeight = value;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if( event.getActionMasked() == MotionEvent.ACTION_DOWN ) {
startx = event.getX();
starty = event.getY();
startleft = getTranslationX();
starttop = getTranslationY();
return true;
}
else if( event.getActionMasked() == MotionEvent.ACTION_UP ) {
setTranslationX( startleft + (event.getX() - startx) );
setTranslationY( starttop + (event.getY() - starty) );
invalidate();
startx = starty = 0;
return true;
}
else if( event.getActionMasked() == MotionEvent.ACTION_MOVE ) {
setTranslationX( startleft + (event.getX() - startx) );
setTranslationY( starttop + (event.getY() - starty) );
invalidate();
return true;
}
else {
return false;
}
}
}
ランナー:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FieldView fieldView = new FieldView(this);
fieldView.setCellHeight(100);
fieldView.setCellWidth(100);
setContentView(fieldView);
}
質問は:なぜ??
編集1
ジャンプは比較的大きな振幅で発生するため、これはノイズではないと思います。
修繕
バグでした。get / setTranslationX / Y()の使用は、タッチイベントの座標に干渉していました。明らかに、イベントは翻訳を考慮に入れます。自分の翻訳フィールドに変更すると、振動が消えました。