Форум программистов, компьютерный форум CyberForum.ru

Как связать несколько ImageView в ScrollView или WebView? - Android

Восстановить пароль Регистрация
 
f1n2009
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
28.01.2016, 23:21     Как связать несколько ImageView в ScrollView или WebView? #1
Здравствуйте, уважаемые форумчане! Только начинаю осваивать Java и Android поэтому прошу не кидаться в меня камнями если что-то опишу не так )
Нужно реализовать, как мне кажется, довольно простую задачу, однако решения, которое меня бы устраивало я не могу найти уже несколько дней.
Суть такова. Есть 4 картинки которые должны скролиться вместе. Основная картинка (в нижнем правом углу) должна скролиться во всех направлениях (x, y и по диагонали). Картинка сверху от нее должна скролиться вместе с ней по горизонтали. Картинка слева от нее - вместе с ней по вертикали. Ну и картинка в левом верхнем - просто картинка, которая скролиться не должна.
Ниже приведу 2 варианта решения которые я рассматривал, но не смог их реализовать так, что бы меня это устраивало.
1 вариант
Разместить ImageView в ScrollView и связать их перемещение в setOnTouchListener:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    //просто картинка
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView8"
        android:src="@drawable/corner8509"
        android:contentDescription="@string/ugolokravn1" />
 
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollVertical2"
        android:layout_below="@+id/imageView8"
        android:scrollbars="none"
        android:fadingEdge="none">
 
        //картинка слева
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView7"
            android:src="@drawable/left8509"
            android:contentDescription="@string/ugolokravn2" />
    </ScrollView>
 
    <HorizontalScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollHorizontal2"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/imageView8"
        android:layout_toEndOf="@+id/imageView8"
        android:scrollbars="none"
        android:fadingEdge="none">
 
        //картинка сверху
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/imageView6"
            android:src="@drawable/top8509"
            android:contentDescription="@string/ugolokravn3" />
    </HorizontalScrollView>
 
    <com.pavel.sortament.VScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:id = "@+id/scrollVertical1"
        android:layout_below="@+id/scrollHorizontal2"
        android:layout_toRightOf="@+id/scrollVertical2"
        android:layout_toEndOf="@+id/scrollVertical2"
        android:scrollbars="none"
        android:fadingEdge="none">
 
    <HorizontalScrollView
        android:id = "@+id/scrollHorizontal1"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:scrollbars="none"
        android:fadingEdge="none">
 
        //основная картинка
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/image1"
            android:src="@drawable/content8509"
            android:contentDescription="@string/ugolokravn4" />
    </HorizontalScrollView>
        
</com.pavel.sortament.VScrollView>
 
</RelativeLayout>
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView1"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:contentDescription="@string/app_name"
        android:src="@drawable/corner8509"/>
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:id="@+id/linearLayout"
        android:layout_alignTop="@+id/linearLayout2"
        android:layout_toLeftOf="@+id/linearLayout2">
 
        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/webView3" />
 
    </LinearLayout>
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_toRightOf="@+id/imageView1"
        android:layout_below="@+id/imageView1"
        android:id="@+id/linearLayout2">
 
        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/webView4" />
 
    </LinearLayout>
 
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignBottom="@+id/imageView1"
        android:layout_toRightOf="@+id/imageView1">
 
        <WebView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/webView2" />
 
    </LinearLayout>
 
</RelativeLayout>
В этом случае все картинки отображаются без проблем, но если их связать таким образом как в первом варианте, то картинка при скролле уползает за границы экрана) и опять естественно не работает "бросок".

А теперь вопрос )
Как реализовать первый способ, что бы большие картинки отображались на устройстве и работал бросок?
или
Как реализовать второй способ, что бы работал бросок и картинка в WebView не "убегала"?
или
Может есть какой-то более рациональный и логичный способ реализовать то, что мне нужно?
или
Забить на это программирование и учиться вышивать крестиком? )

Заранее спасибо за все ответы и за понимание!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2016, 23:21     Как связать несколько ImageView в ScrollView или WebView?
Посмотрите здесь:

Android Возможно использовать ImageView как кнопку?
Как обработать нажатие ImageView Android
Как ровно наложить imageview на surfaceview Android
Android Как заставить работать setImageLevel в потомке ImageView
Как задать относительный размер ImageView? Android
Как можно указать размер ImageView из кода в DP Android
Android Как расширить ImageView через java?
Android Как реализовать переворачивание ImageView в Android?
Android Как изменить размер ImageView из кода?
Android Как нарисовать imageView сверху остальных view?
Android Как обработать нажатие на ImageView? Eclipse(android)
Как заставить работать ViewPager + TabLayout в ScrollView? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
f1n2009
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
01.02.2016, 22:36  [ТС]     Как связать несколько ImageView в ScrollView или WebView? #2
Поскольку ответа не последовало, приведу вариант который я нашел, может кому пригодится:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 связаны между собой.
Yandex
Объявления
01.02.2016, 22:36     Как связать несколько ImageView в ScrollView или WebView?
Ответ Создать тему
Опции темы

Текущее время: 16:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru