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

Доброго времени суток ) создал TabHost поставил на него иконку , при клике на вкладку хочу что бы картинка менялась ! сделал вот таким вот образом



tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {

@Override
public void onTabChanged(String tabId) {
if(tabId.equals("TAB2")){
ViewGroup vq = (ViewGroup)tabHost.getTabWidget().getChildTabViewAt(tabHost.getCurrentTab());
ImageView im = (ImageView)vq.getChildAt(0);
im.setImageResource(R.mipmap.ic_launcher);
}
}
});


в итоге вылетает на строке im.setImageResource(R.mipmap.ic_launcher);

05-17 13:18:06.941 398-398/com.example.danilbulanov.gridviewclass E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.danilbulanov.gridviewclass.MainActivity$1.onTabChanged(MainActivity.java:80)
at android.widget.TabHost.invokeOnTabChangeListener(TabHost.java:359)
at android.widget.TabHost.setCurrentTab(TabHost.java:344)
at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:132)
at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
at android.view.View.performClick(View.java:2485)
at android.view.View$PerformClick.run(View.java:9080)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
Ответ: Terens777, NullPointerException ловишь, где то тут null:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
ViewGroup vq = (ViewGroup)tabHost.getTabWidget().getChildTabViewAt(tabHost.getCurrentTab());
ImageView im = (ImageView)vq.getChildAt(0);
Вопрос: Получить картинку ImageView

Здравствуйте. Подскажите пожалуйста как можно получить ссылку/путь на ресурс картинки которая стоит в ImageView? Перечитал много форумов, где-то сказали, что напрямую нельзя получить или вовсе невозможно. Как-то сомнительно.
Ответ: Spelcrawler, c тегами немного не понял, а вот с установлением id действительно хитрое решение)
Вопрос: Как при построении Listview выибрать картинку в зависимости от значения в БД?

Я использую SimpleCursorAdapter. У меня в БД примерно 1к строк. Я хочу хранить в поле таблицы не всю картинку целиком, а только значение, в зависимости от которого будет выбираться одна из 3х картинок.
Ответ: Я решил проблему, используя класс
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
class MyViewBinder implements SimpleCursorAdapter.ViewBinder {
        @Override
        public boolean setViewValue(View v, Cursor cursor, int columnIndex) {
            Log.e("log", "====================== setViewValue started");
 
            if (v.getId() == R.id.imageView && columnIndex == 4) {//v instanceof ImageView) {
                Log.e("log", "====================== instance of imageView");
                switch (cursor.getInt(4)) {
                    case 0:
                        Log.e("log", "======================            0");
                        ((ImageView) v).setImageResource(R.drawable.neload_icon);
                        break;
                    case 2:
                        Log.e("log", "======================            2");
                        ((ImageView) v).setImageResource(R.drawable.delete_icon);
                        break;
                    default:
                        Log.e("log", "======================            default");
                        ((ImageView) v).setImageResource(R.drawable.reload_icon);
                }
                return true;
            }
            else {
                Log.e("log", "====================== other instance");
                return false;
            }
        }
    }
И конструктор адаптера
Java
1
2
3
4
5
6
    public MySimpleCursorAdapter(Context context, int layout, Cursor c, String[] from,int[] to, int flags, MyDB mdb) {
        super(context, layout, c, from, to, flags);
        db = mdb;
        MyViewBinder mvb = new MyViewBinder();
        this.setViewBinder(mvb);
    }
И после изменения базы данных, для смены картинки
Java
1
2
                cursor = db.getAllData(db_table);
                scAdapter.changeCursor(cursor);
Вопрос: Отображение картинки в 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 с большой картинкой

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

Ребят, очень важный вопрос: Предложим у меня есть две картинки у них есть свои ID, как написать проверку - "Есть ли выше одной картинки другая картинка", т.е если есть выше одной картинки картинка с определенным id то выполняться действие, буду очень благодарен за помощь, думаю код будет сложный.
Ответ: Можно расширить класс 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
public class MyImageView extends ImageView {
 
    public MyImageView(Context context) {
        super(context);
    }
 
    public MyImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
 
    public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
 
    public boolean isHigherThan(View view){
        int[] thisLocation = new int[2];
        int[] viewLocation = new int[2];
        getLocationOnScreen(thisLocation);
        view.getLocationOnScreen(viewLocation);
 
        return thisLocation[1] > viewLocation[1];
    }
    
}
Потом вместо
Код Java(TM) 2 Platform Standard Edition 5.0
1
ImageView img = ...;
Нужно будет делать так:
Код Java(TM) 2 Platform Standard Edition 5.0
1
MyImageView img = ...;
Ну и использовать потом
Код Java(TM) 2 Platform Standard Edition 5.0
1
img.isHigherThan(view);//view - любая вьюшка, вернется true, если img выше view.

Или просто послать в метод:
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public int getHigherView(List<View> viewList){
        int higherPoint = 0;
        int higherView = 0;
 
        for(int i = 0; i < viewList.size(); i++){
            int[] location = new int[2];
            viewList.get(i).getLocationOnScreen(location);
 
            if(location[1] > higherPoint){
                higherPoint = location[1];
                higherView = i;
            }
        }
 
        return higherView;
    }
список любых вьюшек. Вернет порядковый номер вьюшки, которая выше остальных.
Вопрос: Смещается изображение за границы ImageView

Моя головная боль - это рисование лайаутов. В очередной раз встал в ступор...
Почему изображение из ImageView выходит за рамки самого ImageView'а?

И может подскажете, как правильно набросать на экран разных элементов (Изображения, тексты, кнопки, списки) так, чтобы подогнать это под фоновую картинку, на которой уже помечены ровно границы каждого элемента?
Ответ: - положить фоновую картинку в папку соответствующей плотности для которой эта картинка была сделана
- задавать размеры картинок и лаяутов в dp
- PROFIT
Вопрос: Как обработать нажатие на ImageView? Eclipse(android)

Ребят, не пойму в чем ошибка, как обработать нажатие на картинку?
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
public class MainActivity extends ActionBarActivity implements OnClickListener {
 
ImageView imageView1;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView1.setClickable(true);
 
imageView1.setOnClickListener(this);// Без этой строки программа не выдает ошибку, ну и не работает,
//а добавляю это строку программа выдает ошибку и вылетает :( 
}
 
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
 
switch (v.getId()) {
        
case R.id.imageView1:
Intent intent1 = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent1);
break;
        
Ответ: В данном примере не целесообразно использовать конструкцию switch()
Просто
Java
1
2
Intent intent1 = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent1);
Присоединяюсь
Сообщение от Борис Верещагин
ошибку надо смотреть в logcat а не гадать на кофейной гуще. когда-хоть выдает ошибку при запуске или при нажатии?
я думаю что дело не в картинке и не в switch, а в intent. ты там MainActivity2-то в манифесте прописал?
Вопрос: 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, которое находится по центру экрана. Мне нужно, поместить по верх этого изображения рамку. Рамка не совсем прямоугольная, имеет небольшие изгибы и должна немного находить на края изображение. Изображения и рамка подготовлены и лежат в drawable. Можно это как-то сделать?
Ответ:
Сообщение от OlegJV
Поместить одно ImageView поверх другого ImageView))))
Не обязательно.
У ImageView есть android:background и android:src.
Поиграться двумя этими параметрами.
Учитывая что src поверх background - в background картинку, а в src рамку.