Страницы

Поиск по вопросам

Показаны сообщения с ярлыком imageview. Показать все сообщения
Показаны сообщения с ярлыком imageview. Показать все сообщения

среда, 12 февраля 2020 г.

Смена картинки imageView

#java #android #imageview


Как можно сменить картинку, которая есть в ресурсах. В ресурсах нет imageName, а
есть картинки p1, p2 ,p3,.. и т.д. Нужно, чтобы каждый раз показывались разные картинки
в зависимости от position

String imageName = ("p"+position);
imageView.setImageDrawable(R.drawable.imageName);

    


Ответы

Ответ 1



Вам нужно получить идентификатор ресурса по его имени: String mDrawableName = "p" + position; int resID = imageView.getContext().getResources().getIdentifier(mDrawableName , "drawable", imageView.getContext().getPackageName()); imageView.setImageResource(resID);

пятница, 7 февраля 2020 г.

Загрузка картинок из ссылки

#java #android #imageview


Есть список, в каждом элементе должна быть картинка. 
Картинки в виде http ссылок.  

Неужели нет способа подгрузить картинки в основном потоке, не заморачиваясь с созданием
новых потоков? 
    


Ответы

Ответ 1



Конечно же есть! для этого можете воспользоваться библиотекой Picasso Необходимо добавить ее к проекту записью в градл файл: compile 'com.squareup.picasso:picasso:2.5.2' Использовать очень просто Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

Ответ 2



Используйте библиотеки, Picasso или UniversalImageLoader, они все сделают за вас

Ответ 3



Да пожалуйста, хотите основной поток, юзайте)): StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); Только смысл морозить основной поток, приложение будет не юзабельным.

вторник, 31 декабря 2019 г.

Android перемещение ImageView по swipe

#android #imageview #android_imageview #swipe


Всем привет!

Реализовано простое активити с картинкой (скрин ниже).

Как сделать выход из активити наподобие как реализовано в приложении VK и во многих
других приложениях (свайп вверх/вниз по ImageView). Чтобы при свайпе картинка немного
приподнималась/приопускалась в зависимости от свайпа.

При свайпе на определенный модуль высоты активити закрывается, иначе картинка возвращается
на начальное положение.

В принципе обработку свайпа вроде есть понимание как сделать, но вот как поднимать/опускать
ImageView при этом вслед за пальцем на экране, что то я не догоняю. Возможно не в ту
сторону иду, направьте в нужное русло.














Заранее спасибо.
    


Ответы

Ответ 1



На счет перемещения за пальцем - добавляешь к своему ImageView onTouchListener: ImageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: dX = view.getX() - event.getRawX(); dY = view.getY() - event.getRawY(); break; case MotionEvent.ACTION_MOVE: view.animate() .x(event.getRawX() + dX) .y(event.getRawY() + dY) .setDuration(0) .start(); break; case MotionEvent.ACTION_UP: break; default: return false; } return true; } }); Таки образом у тебя ImageView будет следовать за пальцем. А дальше, когда ты отпустишь ее (MotionEvent.ACTION_UP) определяешь - если смещение не большое, то с анимацией перемещаешь ImageView обратно, если смещение достаточное - то выходишь из активити.

воскресенье, 8 декабря 2019 г.

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

#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 связаны между собой.

среда, 17 июля 2019 г.

Как правильно скомпоновать изображения

Проблема заключается в следующем: пользователь выбирает изображения из галереи, которые нужно добавить в сообщение, количество изображений зависит только от пользователя, лимит 10. После отправки сообщения, под текстом пытаюсь вывести изображения в таком виде, как это делается в вк или твиттере, но правильно их скомпоновать у меня не удается. В линейном представлении не вариант, так же само как и сеткой. Хочется, чтобы это выглядело как на картинке. То есть, если пользователь прикрепляет 1 изображение, оно показывается полностью, если 2 картинки - они выводятся в две колонки, если 3 картинки - выводятся в две колонки и снизу под ними третья, и так дальше до лимита. Подскажите пожалуйста, как это можно сделать?


Ответ

Есть замечательная библиотека QuiltView, на основе которой Вы сможете сделать то, что Вас нужно. Быть может, Вам хватит и того функционала, что в нее заложен.

суббота, 22 июня 2019 г.

запуск метода элемента listview, который на экране

нужно загружать картинку в элементы listview, но так как элементов может быть много, загружать их все сразу не очень разумно, как сделать так, чтобы метод запускался только у тех жлементов, что на экране, пробовал так:
list.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { // Log.d(LOG_TAG, "scrollState = " + scrollState); }
@Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { for(int i = firstVisibleItem; i <= visibleItemCount; i++){ element.get(i).loadCover(); } list.invalidate(); } });
но загружаются только первые 6 картинок, а дальше все


Ответ

Для подобной(Относительно. Ленивая асинхронная загрузка изображений) есть маленькая библиотека https://github.com/thest1/LazyList
Проблема вашего кода - вы считаете что visibleItemCount - общее кол-во элементов в адаптере, но это кол-во видимых элементов. Т.е. после шестого элемента вы запускаете цикл с параметром i=7;i<6.
Можно сделать так. Хотя метод onScroll и плохо работает при быстрой прокрутке.
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if(((firstVisibleItem + visibleItemCount) == totalItemCount) && totalItemCount > 0)){ loadNewData(); } list.invalidate(); }
или слегка поправить ваш код
for(int i = firstVisibleItem; i <= (firstVisibleItem+visibleItemCount)&&i<=totalItemCount; i++){ element.get(i).loadCover(); }

понедельник, 22 апреля 2019 г.

Смена картинки imageView

Как можно сменить картинку, которая есть в ресурсах. В ресурсах нет imageName, а есть картинки p1, p2 ,p3,.. и т.д. Нужно, чтобы каждый раз показывались разные картинки в зависимости от position
String imageName = ("p"+position); imageView.setImageDrawable(R.drawable.imageName);


Ответ

Вам нужно получить идентификатор ресурса по его имени:
String mDrawableName = "p" + position; int resID = imageView.getContext().getResources().getIdentifier(mDrawableName , "drawable", imageView.getContext().getPackageName()); imageView.setImageResource(resID);

среда, 10 апреля 2019 г.

Загрузка картинок из ссылки

Есть список, в каждом элементе должна быть картинка. Картинки в виде http ссылок.
Неужели нет способа подгрузить картинки в основном потоке, не заморачиваясь с созданием новых потоков?


Ответ

Конечно же есть! для этого можете воспользоваться библиотекой Picasso
Необходимо добавить ее к проекту записью в градл файл:
compile 'com.squareup.picasso:picasso:2.5.2'
Использовать очень просто
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

четверг, 11 октября 2018 г.

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

Нужно реализовать, как мне кажется, довольно простую задачу, однако решения, которое меня бы устраивало я не могу найти уже несколько дней. Суть такова. Есть 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 не "убегала"?
или
Может есть какой-то более рациональный и логичный способ реализовать то, что мне нужно?
Заранее спасибо за все ответы и за понимание!


Ответ

Нашел кое-какое решение. Может не очень красивое, но мне помогло, может кому пригодится:
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 связаны между собой.