私は自分自身を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);
}
質問はなぜ?
EDIT 1
私はジャンプが比較的大きな振幅で発生するので、これはノイズではないと思います。
FIXED
それはバグでした。 get/setTranslationX/Y()の私の使い方は、タッチイベントの座標を妨害していました。明らかに、イベントは翻訳を考慮に入れます。自分の翻訳分野に変更したとき、振動は消えました。
まさに私が書いていたものです。 :) –
しかし、あなたはどちらも間違った人でした:)私の更新を見てください:) –