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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
f1n2009
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
#1

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

28.01.2016, 23:21. Просмотров 394. Ответов 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 не "убегала"?
или
Может есть какой-то более рациональный и логичный способ реализовать то, что мне нужно?
или
Забить на это программирование и учиться вышивать крестиком? )

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

Скопировать картинку из одной ImageView в другую ImageView - Программирование Android
В ImageView поставлена картинка методом setImageResource. По нажатию на неё, нужно такую-же картинку поставить в другую вью, а в первой...

Как перемещать FrameLayouts в ScrollView? - Программирование Android
Доброго времени суток))) У меня в активити 10 frames засунуты в ScrollView. Как сделать так, чтобы при нажатии на кнопку, frameLayout...

Как заставить работать ViewPager + TabLayout в ScrollView? - Программирование Android
Здравствуйте. Столкнулся с проблемой - ViewPager напрочь отказывается отображаться в ScrollView. При этом вне ScrollView всё работает как...

Содержимое ScrollView сохранить картинкой в галерею. Как? - Программирование Android
Возможно я просто не знаю как правильно спросить об этом у гугла, чтоб он ответил или идея вообще бредовая. Имеется: ScrollView, в...

Как изменить внешний вид полосы прокрутки в ScrollView - Программирование Android
Подскажите пожалуйста, как изменить внешний вид полосы прокрутки в ScrollView? Просто я уже все облазил что можно, а ответа на вопрос так и...

Как указать пользователю, что на ScrollView есть ещё данные? - Программирование Android
Есть экран с элементом ScrollView и данными в нём. Как дать понять пользователю, что помимо той информации, что расположена в ScrollView и...

1
f1n2009
0 / 0 / 0
Регистрация: 28.01.2016
Сообщений: 8
01.02.2016, 22:36  [ТС] #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 связаны между собой.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.02.2016, 22:36
Привет! Вот еще темы с ответами:

Как обработать нажатие на ImageView? - Программирование Android
Ребят, не пойму в чем ошибка, как обработать нажатие на картинку? public class MainActivity extends ActionBarActivity implements...

Как обработать нажатие ImageView - Программирование Android
Создаю программу на Андроиде. И сразу столкнулся с проблемой. Почему то не получается... Создаю три объекта ImageView, и надо при нажатии...

Как реализовать переворачивание ImageView в Android? - Программирование Android
Добрый день! Подскажите, кто знает как реализовать анимацию переворачивания например ImageView, то есть как будто лежит карта и мы ее...

Как расширить ImageView через java? - Программирование Android
Необходимо по чекбоксу менять для картинки параметр: android:layout_width=&quot;wrap_content&quot; на android:layout_width=&quot;fill_content&quot; и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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