canvas.translate в android ставит пробел с обеих сторон после перевода

Я хочу масштабировать и перевести пользовательское представление списка. Я успешно выполнил масштабирование, но когда я перемещаюсь по горизонтали после масштабирования, оно выходит за пределы ширины экрана (означает, что я вижу белый экран), и когда я перемещаюсь по горизонтали в противоположную сторону, я снова вижу вид.

проблема в том, что после использования canvas.translate(x,0) только в направлении x он не фиксируется до ширины просмотра

это код, который я использовал-

открытый класс CustomListView расширяет ListView{

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;
private float x = 0;
private float y = 0;
private float startx = 0;
private float starty = 0;
private boolean canClick = true;
private float xtranslation = 0;
private float xPos = 0;


public CustomListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        startx = ev.getX();
        starty = ev.getY();
    }

    if (ev.getPointerCount() > 1) {
        y = ev.getY();
        x = ev.getX();
    } else if (ev.getAction() == MotionEvent.ACTION_UP) {
        canClick = (ev.getX() - startx) == 0 && (ev.getY() - starty) == 0 && mScaleFactor == 1;
    } else if((ev.getAction() == MotionEvent.ACTION_MOVE)){
        xtranslation = ev.getX() - startx;
    }      
    mScaleDetector.onTouchEvent(ev);
    return super.onTouchEvent(ev);
}

@Override
protected void onDraw(Canvas canvas) {
    canvas.scale(mScaleFactor, mScaleFactor, x , y);
    System.out.println("trans : "+xtranslation+"   XPOS : "+xPos);
    if(mScaleFactor > 1){
        canvas.translate(xtranslation/2, 0);
    }
    super.onDraw(canvas);
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener{
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
         canClick = false;
            mScaleFactor *= detector.getScaleFactor();

            // Don't let the object get too small or too large.
            mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 2.0f));

            if (mScaleFactor <= 1) {
                mScaleFactor = 1;
                canClick = true;
            }

            xPos = CustomListView.this.getWidth() - detector.getFocusX();

            CustomListView.this.invalidate();
            return true;
    }
}
public boolean canClick(){
    return canClick;
}

}

пожалуйста, решите мою проблему, если это возможно


person Ashish Agrawal    schedule 13.11.2013    source источник
comment
почему вы масштабируете/переводите Canvas в onDraw?   -  person pskink    schedule 13.11.2013
comment
тогда что мне делать   -  person Ashish Agrawal    schedule 13.11.2013
comment
мой вопрос такой же, как stackoverflow.com/questions/14325483 /   -  person Ashish Agrawal    schedule 13.11.2013