Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Координаты ImageView

Всем привет, хочу попросить у вас помощи, проблема заключается в следующем:
У нас есть приложение в Android Studio, ну так же имеются допустим два Label или ImageView, без разницы. Задача в следующем, нужно чтоб эти компоненты появлялись в том месте, куда я ткнул пальцем. Есть ли у этих компонентов что-то вроде X и Y. Или как можно это еще реализовать? Заранее спасибо за помощь
Ответ: view - это View или ImageView, не важно
container - это id лаяута, в котором это вью болтается, в примере это FrameLayout
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
        final View view = findViewById(R.id.awesomeView);
        findViewById(R.id.container).setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent e) {
                if (e.getAction() == MotionEvent.ACTION_DOWN) {
                    view.setX(e.getX());
                    view.setY(e.getY());
                }
                return false;
            }
        });
Вопрос: Ошибка сохранения состояния ImageView

Помогите стажеру, плиз
Приложение должно менять ImageView из NavigationView. Реализовал это с помощью Intent.ACTION_PICK, в метод onActivityResult приходит Uri выбранного изображения и "очень плохим" кодом новичка меняю глобально инициализированный тот самый Image view.

И на этом все прекрасно работает, изображение меняется на выбранное. Самое интересное происходит когда я пытаюсь сохранить состояние этого самого ImageView
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
 private static String URI_PATH = "";
ImageView imageView;
 
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        imageView = (ImageView)findViewById(R.id.imageView);
 
        if(requestCode == CODE_ACCESS){
            if(resultCode == RESULT_OK){
                Uri select = data.getData();
                try{
                    imageView.setImageURI(select);
                    String parseUri = select.toString();
                    URI_PATH = parseUri;
                }catch (Exception e){e.printStackTrace();}
            }else
                Log.i(TAG, "Error resultCode");
        }else
            Log.i(TAG, "Error requestCode");
    }
@Override
    protected void onSaveInstanceState(Bundle outState) {
        if(URI_PATH.length() > 1){
            Log.i(TAG, "Путь Uri сохранен");
            outState.putString(ACCESS_KEY, URI_PATH);
        }
        super.onSaveInstanceState(outState);
    }
 
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        String getPath = savedInstanceState.getString(ACCESS_KEY);
        try{
            Uri getUri = Uri.parse(getPath);
            imageView.setImageURI(getUri);
        }catch (Exception e){e.printStackTrace();}
    }
Uri ссылку я решил сохранять в стринговом виде(ибо больше не придумал как) и затем снова парсингом превращаю в Uri. Изображение меняется, ОДНАКО вываливается исключение .NullPointerException у ImageView (на скриншоте)
Сколько гуглил так и не понял в чем точная причина. Может в жизненном цикле активности и поэтому imageview недоступен, но как тогда правильно?
Ответ: Спасибо за ответы. Сейчас читаю про сохранение с помощью onPause и onStop, однако мне еще один момент остается не понятным. При повороте устройства происходит сохранение состояния в onSaveInstanceState(), прикреплю скрин с логами и код. По идее onCreate() же должен инициализировать этот самый imageView, так почему он его упорно не видит?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "OnCreate");
 
        if(savedInstanceState != null){
            Log.d(TAG, "savedInstanceState != null");
            String getPath = savedInstanceState.getString(ACCESS_KEY);
            Log.d(TAG, "Сохраненный путь: " + getPath);
 
            try{
                ImageView imageView = (ImageView)findViewById(R.id.imageView);
                Uri getUri = Uri.parse(getPath);
                imageView.setImageURI(getUri);
            }catch (Exception e){e.printStackTrace();}
        }
}
И если даже вынести инициализацию глобально, то все равно NullPointException
Java
1
ImageView imageView;
Вопрос: Отображение картинки в ImageView полученной из ссылки

Всем привет!

Длеаю приложение, которое получет JSON с сервера. Вид его следующий:
Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
  {
     "id": 1,
     "typeOfOrganization": "Администрации",
     "created_at": 1462233600000,
     "url": "https://...../images/icon.png"
   },
  {
    "id": 2,
    "typeOfOrganization": "архив",
    "created_at": 1462233600000,
    "url": "https://.../images/icon.png"
   }
]

Где в url хранится абсолютный путь к картинке. Этот JSON я успешно получаю:
Кликните здесь для просмотра всего текста
MainActivity.java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private class OrgMeTask extends AsyncTask<Void, Void, OrgDTO[]> {
        @Override
        protected OrgDTO[] doInBackground(Void... params) {
            RestTemplate template = new RestTemplate();
            template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
            OrgDTO[] result = template.getForObject(Constans.URL.GET_PUBLIC_ORG_ITEM, OrgDTO[].class);
            return result;
        }
 
        @Override
        protected void onPostExecute(OrgDTO[] orgDTO) {
            List<OrgDTO> data = new ArrayList<>();
            for (int i = 0; i < orgDTO.length; i++) {
                data.add(orgDTO[i]);
            }
            adapter.setData(data);
        }
    }

В листе data приходят данные как на скриншоте. Разметка такая:
Кликните здесь для просмотра всего текста

public_org_item.xml
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
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="5dp"
    android:layout_marginBottom="3dp"
    android:layout_marginLeft="12dp"
    android:layout_marginRight="12dp">
 
    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/cardView"
        card:cardElevation="2dp"
        card:cardUseCompatPadding="true">
 
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="14dp"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/title"
                android:textSize="8pt"
                android:textColor="@color/colorBlack"
                android:paddingBottom="5dp"
                />
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/imageView" />
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="TEST"/>
            </LinearLayout>
        </LinearLayout>
 
    </android.support.v7.widget.CardView>
 
</LinearLayout>

В dto классе созданы соответствующие сеттеры и геттеры:
Кликните здесь для просмотра всего текста
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.spravka.dto;
 
import android.graphics.Bitmap;
 
import java.util.Date;
 
public class OrgDTO {
 
    public OrgDTO() {
 
    }
 
    private int id;
    private String typeOfOrganization;
    private Date created_at;
    private String url;
 
    public Bitmap getImage() {
        return image;
    }
 
    public void setImage(Bitmap image) {
        this.image = image;
    }
 
    private Bitmap image;
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getTypeOfOrganization() {
        return typeOfOrganization;
    }
 
    public void setTypeOfOrganization(String typeOfOrganization) {
        this.typeOfOrganization = typeOfOrganization;
    }
 
    public Date getCreated_at() {
        return created_at;
    }
 
    public void setCreated_at(Date created_at) {
        this.created_at = created_at;
    }
 
    public OrgDTO(String title) {
        this.typeOfOrganization = title;
    }
 
    public String getTitle() {
        return typeOfOrganization;
    }
 
    public void setTitle(String title) {
        this.typeOfOrganization = title;
    }
}

В адаптере прописал:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void onBindViewHolder(OrgViewHolder holder, int position) {
        OrgDTO item = data.get(position);
        holder.title.setText(item.getTitle());
        holder.imageView.setImageBitmap(item.getImage());
    }
 public static class OrgViewHolder extends RecyclerView.ViewHolder {
 
        CardView cardView;
        TextView title;
        ImageView imageView;
 
        public OrgViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.cardView);
            title = (TextView) itemView.findViewById(R.id.title);
            imageView = (ImageView) imageView.findViewById(R.id.imageView);
        }
    }


Подскажите пожалуйста, как и где теперь мне из ссылки получить Bitmap и проставить его в ImageView?
Ответ: - указывать надо полный путь к картинке
- контекст можно брать прямо с imageView, там точно работает, проверено не раз
Вопрос: Сохранить ImageView

Подскажите пожалуйста, пытаюсь наложить bitmap на bitmap из imageview и сохранить его, код работает, но сохраненный файл получается обрезанный по дисплею, можно как нибудь сохранить как оригинальный файл ,а не обрезанный ?
Java(TM) 2 Platform Standard Edition 5.0
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
public Bitmap bitmap(){
        Bitmap newBitmap = null;
 
        myImageView.buildDrawingCache();
        bitmap = myImageView.getDrawingCache();
        
        imageView.buildDrawingCache();
        bitmap2 = imageView.getDrawingCache();
        
        int w;
        if (bitmap.getWidth() >= bitmap2.getWidth()) {
            w = bitmap.getWidth();
        } else {
            w = bitmap2.getWidth();
        }
 
        int h;
        if (bitmap.getHeight() >= bitmap2.getHeight()) {
            h = bitmap.getHeight();
        } else {
            h = bitmap2.getHeight();
        }
 
        Config config = bitmap.getConfig();
        if (config == null) {
            config = Bitmap.Config.ARGB_8888;
        }
 
        newBitmap = Bitmap.createBitmap(w, h, config);
        Canvas newCanvas = new Canvas(newBitmap);
                newCanvas.drawBitmap(bitmap, 0, 0, null);
                newCanvas.drawBitmap(bitmap2, 0, 0, null);
 
    return newBitmap;
 
    }
Добавлено через 12 минут
ImageView я сделал zoom scroll
Ответ: ошибка в том, что Вы берете Bitmap из ImageView.
ImageView - это отображение, вывод данных для юзера. берите Bitmap, накладывайте на него другой и сохраняйте. результат - выводите в ImageView.

чисто навскидку, это будет примерно так:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
//создаете новый Bitmap.
Bitmap bmp = Bitmap.createBitmap(inBitmap.getWidth(), inBitmap.getHeight(), Bitmap.Config.ARGB_4444);
//ну без этого вообще никак
Canvas imageCanvas = new Canvas(bmp);
Paint imagePaint = new Paint();
//и по новому Bitmap сначала рисуем наш файл.
imageCanvas.drawBitmap(inBitmap, 0, 0, imagePaint);
//можно еще один файл наложить
imageCanvas.drawBitmap(inBitmap2, 40, 70, imagePaint);
//и потом все это пишем кудато
out = new FileOutputStream(fullPath);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
и потом fullPath идет в ImageView.
Вопрос: Разместить поверх ImageView рамку

У меня есть некое изображение, ImageView, которое находится по центру экрана. Мне нужно, поместить по верх этого изображения рамку. Рамка не совсем прямоугольная, имеет небольшие изгибы и должна немного находить на края изображение. Изображения и рамка подготовлены и лежат в drawable. Можно это как-то сделать?
Ответ:
Сообщение от OlegJV
Поместить одно ImageView поверх другого ImageView))))
Не обязательно.
У ImageView есть android:background и android:src.
Поиграться двумя этими параметрами.
Учитывая что src поверх background - в background картинку, а в src рамку.
Вопрос: ImageView с большой картинкой

XML
1
2
3
4
5
6
                <ImageView
                    android:id="@+id/serview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_margin="6dp"
                    android:scaleType="fitStart" />
Java
1
mImageView.setImageBitmap(bitmap);
Картинка заведомо больше экрана, так как она растровая, и должна выглядеть красиво на всех разрешениях.
Как видите, по ширине и высоте устанавливается она правильно, но ImageView занимает лишнее место. Видимо, реальный размер картинки. Как убрать такой огромный отступ?

Добавлено через 5 минут
Понял уже, спасибо, ребята! Надо было в ImageView src ставить эту картинку, и потом в методах прописать:
Java
1
mImageView.getLayoutParams().height=(int)Math.round(mImageView.getWidth()*619.0/877.0);//отношение высоты и ширины
Ответ: D7ILeucoH, я бы на вашем месте прислушался к советам - все они в точку, ваш вариант с хардкодом размера картинки и подгонном размера ImageView под него - рабочий, но правильнее и проще в общем случае будет делать так как советуют
Вопрос: Анимация ImageView

Здравствуйте.
Как реализовать анимацию Imageview таким образом,что бы при нажатии кнопка затемнялась от центра к краям.
Может плохо искал,но решения не нашел.
Заранее благодарю.
Ответ: Корф,
1. Создать xml shape с gradient параметром. (гугл - android xml shape gradient)
2. Создать xml selector с состоянием нажатия и присвоить первый xml. (гугл - android imageview pressed state)
Вопрос: ImageView открыть в Галерее

Есть ImageView. Нужно, чтобы при нажатии на него картинка в нём открывалась через Галерею
Ответ: Спасибо за ответ, но как подавать uri?
Java
1
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/image.jpg"));
Так? Открывает галерею, но не саму картинку.

Добавлено через 17 минут
Я понял, ты понял меня так, что мне нужно загрузить фотографию ИЗ галереи куда-то. А мне нужно открыть фото по клику по ImageView ЧЕРЕЗ галерею.

Добавлено через 7 минут
Мне нужно вызвать вот такое диалоговое окно


Добавлено через 8 минут
Узнал! Вот, что я хотел
Java
1
2
3
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("image/*");
startActivity(intent);
Но не могу передать путь до изображения....

Добавлено через 35 минут
Финал! Сделал!
Java
1
2
3
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse("file://" + path), "image/*");
        startActivity(intent);
Вопрос: ImageView на весь экран

Добрый день. Подскажите, как мне растянуть ImageView на весь экран так, чтобы по краям не было полосок (видно на скриншоте). Сразу скажу, что мой активити находится в полноэкранном режиме (ниже код).
Форма:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@android:style/android:Theme.NoTitleBar"
    tools:context="com.example.laba4.SecondActivity" >
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
    
</RelativeLayout>
Класс:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
public class SecondActivity extends ActionBarActivity implements OnTouchListener
{
    @Override
    protected void onCreate(final Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();       
        setContentView(R.layout.activity_second);
    }
}
Ответ: Armagedo,
Вопрос: Imageview растянуть изображение по вертикали и обрезать по горизонтали

Здравствуйте, для фона бокового меню нужно поместить картинку, что б по вертикали растягивалась, а по правой стороне обрезалась, пытаюсь как то через imageview сделать. Кто подобные задачи решал?
Ответ:
что значит не взлетело?
Не заработало в нужно мне виде, возможно у меня руки чуть не так). Сделал как сделал, не сильно красиво, но работает.

Паблито,
И всем остальным, спасибо за помощь.