#java #android #webview #imageview
Нужно реализовать, как мне кажется, довольно простую задачу, однако решения, которое меня бы устраивало я не могу найти уже несколько дней. Суть такова. Есть 4 картинки которые должны скролиться вместе. Основная картинка (в нижнем правом углу) должна скролиться во всех направлениях (x, y и по диагонали). Картинка сверху от нее должна скролиться вместе с ней по горизонтали. Картинка слева от нее - вместе с ней по вертикали. Ну и картинка в левом верхнем - просто картинка, которая скролиться не должна. Ниже приведу 2 варианта решения которые я рассматривал, но не смог их реализовать так, что бы меня это устраивало. 1 вариант Разместить ImageView в ScrollView и связать их перемещение в setOnTouchListener://просто картинка public class Gost8509 extends Activity implements View.OnTouchListener { HorizontalScrollView hScroll1, hScroll2; VScrollView vScroll1; ScrollView vScroll2; float mx, my, curX, curY; private boolean started = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gost8509); hScroll1 = (HorizontalScrollView) findViewById(R.id.scrollHorizontal1); hScroll1.setOnTouchListener(this); hScroll2 = (HorizontalScrollView) findViewById(R.id.scrollHorizontal2); hScroll2.setOnTouchListener(this); vScroll1 = (VScrollView) findViewById(R.id.scrollVertical1); vScroll1.setOnTouchListener(this); vScroll2 = (ScrollView) findViewById(R.id.scrollVertical2); vScroll2.setOnTouchListener(this); vScroll1.sv = hScroll1; } @Override public boolean onTouch(View v, MotionEvent event) { curX = event.getX(); curY = event.getY(); int x = (int) (mx - curX); int y = (int) (my - curY); switch (event.getAction()) { case MotionEvent.ACTION_MOVE: if (started) { vScroll1.scrollBy(0, y); vScroll2.scrollBy(0, y); hScroll1.scrollBy(x, 0); hScroll2.scrollBy(x, 0); } else { started = true; } mx = curX; my = curY; break; case MotionEvent.ACTION_UP: vScroll1.scrollBy(0, y); vScroll2.scrollBy(0, y); hScroll1.scrollBy(x, 0); hScroll2.scrollBy(x, 0); started = false; break; } return true; } } При этом способе у меня перестает работать "бросок" (что естественно) и основная загвоздка в том, что если основная картинка очень больших размеров, то она перестает отображаться в эмуляторе. 2 способ Расположить все картинки в WebView://картинка слева //картинка сверху //основная картинка В этом случае все картинки отображаются без проблем, но если их связать таким образом как в первом варианте, то картинка при скролле уползает за границы экрана) и опять естественно не работает "бросок". А теперь вопрос ) Как реализовать первый способ, что бы большие картинки отображались на устройстве и работал бросок? или Как реализовать второй способ, что бы работал бросок и картинка в WebView не "убегала"? или Может есть какой-то более рациональный и логичный способ реализовать то, что мне нужно? Заранее спасибо за все ответы и за понимание!
Ответы
Ответ 1
Нашел кое-какое решение. Может не очень красивое, но мне помогло, может кому пригодится: relLayout.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { @Override public void onScrollChanged() { if (webview1.isFocused()) { webview3.setScrollX(webview1.getScrollX()); } if (webview2.isFocused()) { webview3.setScrollY(webview2.getScrollY()); } if (webview3.isFocused()) { webview1.setScrollX(webview3.getScrollX()); webview2.setScrollY(webview3.getScrollY()); } } }); Таким образом получается, что прокрутки всех 3-х WebView связаны между собой.
Комментариев нет:
Отправить комментарий