Ответ 1
Я просто собрал для этого рабочий класс. Дайте мне знать, если это сработает для вас. https://github.com/Xjasz/AndroidZoomableViewGroup
Я пытаюсь реализовать щепотку, чтобы увеличить список на Android, и я столкнулся с проблемой, когда я нажимаю и перетаскиваю увеличенный вид списка. Во-первых, вот код:
public class ScaleListView extends 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;
public ScaleListView(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
public void onDraw(Canvas canvas) {
canvas.scale(mScaleFactor, mScaleFactor, x , y);
canvas.translate(xtranslation, 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, 5.0f));
if (mScaleFactor <= 1) {
mScaleFactor = 1;
canClick = true;
}
xPos = ScaleListView.this.getWidth() - detector.getFocusX();
ScaleListView.this.invalidate();
return true;
}
}
public boolean canClick(){
return canClick;
}
Проблема заключается в переводе. Это бесконечно, я могу перетащить его по горизонтали и отобразить список из окна просмотра. Поэтому я не могу столкнуться с тем, как положить конец переводу... Спасибо за любую помощь.
Я просто собрал для этого рабочий класс. Дайте мне знать, если это сработает для вас. https://github.com/Xjasz/AndroidZoomableViewGroup
follwing-код ограничивает мое текстовое изображение краями экранов. Надеюсь, это поможет вам в вашем списке. Я сделал этот код в ACTION: Move
layoutParams.leftMargin = X - _xDelta;
layoutParams.topMargin = Y - _yDelta;
if (layoutParams.leftMargin < 0) {
layoutParams.leftMargin = 20;
} else if (layoutParams.leftMargin > mainimage.getWidth()) {
layoutParams.leftMargin = mainimage.getWidth() - 20;
}
if (layoutParams.topMargin < 0) {
layoutParams.topMargin = 20;
} else if (layoutParams.topMargin > mainimage.getHeight() - 100) {
text.setText(text2.getText().toString());
layoutParams.topMargin = mainimage.getHeight() - 90
- text.getHeight();
// layoutParams.leftMargin = 20;
}
text.setX(layoutParams.leftMargin);
text.setY(layoutParams.topMargin);
v.setLayoutParams(text.getLayoutParams());
Вы можете найти класс zoomListView здесь. Вы можете установить pinchZoom, а также двойную привязку для увеличения/увеличения.