Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 22
1

Алгоритм поочередного заполнения ImageView, объектами

26.03.2017, 15:27. Показов 1338. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Смотрите, есть Activity в нем 6 ImageView. по нажатию на каждое из них запускается галерея для выбора фото с sd карты. Так же я пытаюсь реализовать возможность сделать снимки. Изображение должно вставать на свободный 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
40
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if (requestCode==CAMERA_CAPTURE && resultCode==RESULT_OK) {
            if (CHECK_img0==0) {
                imagesArray[0].setImageURI(mUri);
                CHECK_img0=1;
            }else{
                if(CHECK_img1==0){
                    imagesArray[1].setImageURI(mUri);
                    CHECK_img1=1;
                }else{
                    if(CHECK_img2==0){
                        imagesArray[2].setImageURI(mUri);
                        CHECK_img2=1;
                    }else{
                        if(CHECK_img3==0){
                            imagesArray[3].setImageURI(mUri);
                            CHECK_img3=1;
                        }else{
                            if(CHECK_img4==0){
                                imagesArray[4].setImageURI(mUri);
                                CHECK_img4=1;
                            }else{
                                if (CHECK_img5==0){
                                    imagesArray[5].setImageURI(mUri);
                                    CHECK_img5=1;
                                }else{
                                    Toast toast = Toast.makeText(AddActivity.this,"Нет места под изображение",Toast.LENGTH_LONG);
                                toast.show();}
                            }
                        }
                    }
                }
            }
    }else{
           Toast toast2 = Toast.makeText(this,"Фото не создано.",Toast.LENGTH_LONG);
            toast2.show();
 
    }

CHECK_img - это переменная для того что бы отметить занятое ImageView
но она не работает должным образом. Если, например, во второе ImageView добавить изображение из галереи то снимок добавляется в третье, а первое ImageView остается пустым.
Подскажите как лучше можно реализовать заполнение свободного 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
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
package ru.rptm.cookbook_test;
 
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import static ru.rptm.cookbook_test.R.id.button_cam;
import static ru.rptm.cookbook_test.R.id.button_progres;
import static ru.rptm.cookbook_test.R.id.button_res;
import static ru.rptm.cookbook_test.R.id.imageView2;
import static ru.rptm.cookbook_test.R.id.imageView3;
import static ru.rptm.cookbook_test.R.id.imageView4;
import static ru.rptm.cookbook_test.R.id.imageView5;
import static ru.rptm.cookbook_test.R.id.imageView6;
import static ru.rptm.cookbook_test.R.id.imageView7;
 
public class AddActivity extends AppCompatActivity implements View.OnClickListener{
    private ImageView img1,img2,img3,img4,img5,img6;
    ImageView [] imagesArray;
    int [] ImView_id;
    int len;
    private Button btnprogress;
    private Button btnok;
    private Button btncancel_back;
    private Button btnnewcam;
    private Button btnresourses;
    private Uri mUri; // ури камеры
    private Uri imageUri; // ури с галлереи
 
    static final int CAMERA_CAPTURE = 1;
    static final int REQUEST_IMAGE_PICK = 1;
 
     int CHECK_img0 = 0; // для определения пустого имайдже вью
     int CHECK_img1 = 0;
     int CHECK_img2 = 0;
     int CHECK_img3 = 0;
     int CHECK_img4 = 0;
     int CHECK_img5 = 0;
 
    int IdChk = 0;// для определнения нажатия на имаже вью\
 
    private static final String TAG = "myLogs";
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        setTitle("Добавить рецепт");
        onCheckVariblies(); // очищаем переменные
 
        btnresourses = (Button) findViewById(button_res);
        btnprogress = (Button) findViewById(button_progres);
        btnok = (Button) findViewById(R.id.button_ok);
        btncancel_back = (Button) findViewById(R.id.button_cancel);
        btnnewcam = (Button) findViewById(button_cam);
 
        ImView_id = new int []
                {R.id.imageView2, R.id.imageView3, R.id.imageView4,
                 R.id.imageView5, R.id.imageView6, R.id.imageView7};
 
        imagesArray = new ImageView[]
                {img1,img2,img3,img4,img5,img6};
 
        len = imagesArray.length;
 
        for(int i = 0;i < len; i++){
            imagesArray[i]=(ImageView)findViewById(ImView_id[i]);
            imagesArray[i].setOnClickListener(this);
        }
        Log.d(TAG, "Заселение массива ImageView===OK");
 
        btnresourses.setOnClickListener(this);
        btnprogress.setOnClickListener(this);
        btnok.setOnClickListener(this);
        btncancel_back.setOnClickListener(this);
        btnnewcam.setOnClickListener(this);
    }
 
    private void onCheckVariblies(){ // сброс переменных
         CHECK_img0 = 0;
         CHECK_img1 = 0;
         CHECK_img2 = 0;
         CHECK_img3 = 0;
         CHECK_img4 = 0;
         CHECK_img5 = 0;
        Log.d(TAG, "onCheckVariblies()===OK");
}
 
    @Override
    public void onClick(View v) {
    switch (v.getId()) {
        case button_res: // ингредиенты
            Intent btnintent = new Intent(AddActivity.this, Activity_Textview.class);
            startActivity(btnintent);
            Log.d(TAG, "Activity_TextView===START");
            break;
        case button_progres: // прогресс
            Intent btnintent2 = new Intent(AddActivity.this, Activity_Textview.class);
            startActivity(btnintent2);
            Log.d(TAG, "Activity_TextView===START");
            break;
        case R.id.button_ok:
            finish();
            break;
        case R.id.button_cancel:
            finish();
            break;
        case button_cam: // камера
                mUri = generateFileUri();
            Log.d(TAG, "generateFileUri()==OK");
            if (mUri == null) {
               Toast.makeText(this, "SD card not available", Toast.LENGTH_LONG).show();
                return;}
            Log.d(TAG, "generateFileUri()CHECKED==OK");
                try {
                    // Намерение для запуска камеры;
                    Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mUri);
                    startActivityForResult(captureIntent, CAMERA_CAPTURE);
                } catch (ActivityNotFoundException e) {
                    // Выводим сообщение об ошибке
                    String errorMessage = "Ваше устройство не поддерживает съемку";
                    Toast toast = Toast
                            .makeText(this, errorMessage, Toast.LENGTH_SHORT);
                    toast.show();
                } catch (Exception e){
                    Toast toast = Toast.makeText(this,"Ошибка доступа",Toast.LENGTH_SHORT);
                    toast.show();
                }
            Log.d(TAG, "Activity_CAMERA===START");
               break;
                case imageView2:
                    Intent imageIntent = new Intent(Intent.ACTION_PICK);
                    imageIntent.setType("image/*");
                    startActivityForResult(imageIntent, REQUEST_IMAGE_PICK);
                    IdChk = 1;
                    Log.d(TAG, "img1===ON");
                    break;
                case imageView3:
                    Intent imageIntent2 = new Intent(Intent.ACTION_PICK);
                    imageIntent2.setType("image/*");
                    startActivityForResult(imageIntent2, REQUEST_IMAGE_PICK);
                    IdChk = 2;
                    Log.d(TAG, "img2===ON");
                    break;
                case imageView4:
                    Intent imageIntent3 = new Intent(Intent.ACTION_PICK);
                    imageIntent3.setType("image/*");
                    startActivityForResult(imageIntent3, REQUEST_IMAGE_PICK);
                    IdChk = 3;
                    Log.d(TAG, "img3===ON");
                    break;
                case imageView5:
                    Intent imageIntent4 = new Intent(Intent.ACTION_PICK);
                    imageIntent4.setType("image/*");
                    startActivityForResult(imageIntent4, REQUEST_IMAGE_PICK);
                    IdChk = 4;
                    Log.d(TAG, "img4===ON");
                    break;
                case imageView6:
                    Intent imageIntent5 = new Intent(Intent.ACTION_PICK);
                    imageIntent5.setType("image/*");
                    startActivityForResult(imageIntent5, REQUEST_IMAGE_PICK);
                    IdChk = 5;
                    Log.d(TAG, "img5===ON");
                    break;
                case imageView7:
                    Intent imageIntent6 = new Intent(Intent.ACTION_PICK);
                    imageIntent6.setType("image/*");
                    startActivityForResult(imageIntent6, REQUEST_IMAGE_PICK);
                    IdChk = 6;
                    Log.d(TAG, "img6===ON");
                    break;
        }
    }
 
 
    private Uri generateFileUri() {
 
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
            return null;
 
        File path = new File (Environment.getExternalStorageDirectory(), "CookBook");
        if (! path.exists()){
            if (! path.mkdirs()){
                return null;
            }
        }
 
        String timeStamp = String.valueOf(System.currentTimeMillis());
        File newFile = new File(path.getPath() + File.separator + timeStamp + ".jpg");
//        mCurrentPhotoPath = "file:" + File.getAbsolutePath(); // тут я остановился
        return Uri.fromFile(newFile);
    }
 
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        onCheckVariblies();
        Log.d(TAG, "onDestroy()==OK");
    }
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if (requestCode==CAMERA_CAPTURE && resultCode==RESULT_OK) {
            if (CHECK_img0==0) {
                imagesArray[0].setImageURI(mUri);
                CHECK_img0=1;
            }else{
                if(CHECK_img1==0){
                    imagesArray[1].setImageURI(mUri);
                    CHECK_img1=1;
                }else{
                    if(CHECK_img2==0){
                        imagesArray[2].setImageURI(mUri);
                        CHECK_img2=1;
                    }else{
                        if(CHECK_img3==0){
                            imagesArray[3].setImageURI(mUri);
                            CHECK_img3=1;
                        }else{
                            if(CHECK_img4==0){
                                imagesArray[4].setImageURI(mUri);
                                CHECK_img4=1;
                            }else{
                                if (CHECK_img5==0){
                                    imagesArray[5].setImageURI(mUri);
                                    CHECK_img5=1;
                                }else{
                                    Toast toast = Toast.makeText(AddActivity.this,"Нет места под изображение",Toast.LENGTH_LONG);
                                toast.show();}
                            }
                        }
                    }
                }
            }
    }else{
           Toast toast2 = Toast.makeText(this,"Фото не создано.",Toast.LENGTH_LONG);
            toast2.show();
 
    }
            if (requestCode==REQUEST_IMAGE_PICK && resultCode == RESULT_OK) {
                        try {
                            //Получаем URI изображения, преобразуем его в Bitmap
                            //объект и отображаем в элементе ImageView нашего интерфейса:
                            imageUri = data.getData();
//                            final InputStream imageStream = getContentResolver().openInputStream(imageUri);
//                            selectedImage = BitmapFactory.decodeStream(imageStream);
                            switch (IdChk){
                                case 1:
                               /// img1.setImageBitmap(selectedImage);
                                    imagesArray[0].setImageURI(imageUri);
                                CHECK_img0=1;
                                    break;
                                case 2:
//                                    img2.setImageBitmap(selectedImage);
                                    imagesArray[1].setImageURI(imageUri);
                                    CHECK_img1=1;
                                    break;
                                case 3:
//                                    img3.setImageBitmap(selectedImage);
                                    imagesArray[2].setImageURI(imageUri);
                                    CHECK_img2=1;
                                    break;
                                case 4:
//                                    img4.setImageBitmap(selectedImage);
                                    imagesArray[3].setImageURI(imageUri);
                                    CHECK_img3=1;
                                    break;
                                case 5:
//                                    img5.setImageBitmap(selectedImage);
                                    imagesArray[4].setImageURI(imageUri);
                                    CHECK_img4=1;
                                    break;
                                case 6:
//                                    img6.setImageBitmap(selectedImage);
                                    imagesArray[5].setImageURI(imageUri);
                                    CHECK_img5=1;
                                    break;
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
            }
 
        }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2017, 15:27
Ответы с готовыми решениями:

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

Выделение участка на TImage для заполнения его объектами
Добрый день. Нужно реализовать такую вещь... На компоненте TImage выделяется прямоугольная область,...

Алгоритм заполнения множества
Как рандомно заполнить множество состоящее из 20 целых чисел от 1 до 50. К примеру

Алгоритм заполнения матрицы
Добрый день, Нужно реализовать алгоритм заполнения приведенной ниже матрицы. Оптимизировать...

11
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
26.03.2017, 18:22 2
вау. вот это IF. для начала посмотрите что такое SWITCH.
я бы реализовал это примерно так, взял бы массив с 6-ю ячейками и в них булеаны. и сделал бы рандом, который будет выдавать число между 0 и 5 . когда в онАктивитиРезальт, появляется новая фотография, просим выдать нам рандом, с этим рандомом идем в массив и смотрим, если в ячейки под полученым от рандом числом есть тру, значит что в имейджвью с номером этой ячейки уже есть картинка, и просим еще раз новый рандом. если с новым рандомом мы получаем фолс, значит ничего там не лежит и меняем на тру и ставим картинку в имейдж вью с номером который получили. в общем такая идея, еще нужно оптимизировать , т.к когда останется одна ячейка рандом будет туда долго попадать, по этому нужно изменять промежуток рандома.
0
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 22
26.03.2017, 18:42  [ТС] 3
Да, что намудрил с if /else начинаю потихоньку осознавать, с рандомом тоже как то заморочено, хочется сделать чтобы было по порядку а не в разброс.
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
26.03.2017, 18:53 4
так еще проще. массив, бежите по массиву, в первой ячейке в которой фолс, меняете на тру и в имедж вью с ее индексом вставляете картинку. А еще проще держать в листе все 6 имейджвью и делать ImageVIew.getDrawable()
если возвращает наль значит пустая и в нее ставим
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 22
27.03.2017, 10:11  [ТС] 5
Вы имеете ввиду пролистать циклом for?

Добавлено через 15 часов 8 минут
переделал как то так
Java
1
2
3
4
5
6
7
8
9
10
11
12
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
       if (requestCode==CAMERA_CAPTURE && resultCode==RESULT_OK) {
 
              for (int i=0; i>CheckImg.length;i++){
               if(CheckImg[i]){
               CheckImg[a]=true;
               imagesArray[a].setImageURI(mUri);}
 
           }
                   
               }
CheckImg[5]- boolean массив с false по умолчанию, не могу закончить логику поскажите
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
27.03.2017, 10:26 6
Лучший ответ Сообщение было отмечено dima40420 как решение

Решение

да. создаете 6 имеджвью, их все в лист, в он активити резальт бежите по листу фором, в первую в которой гетДравабл наль, вставляете туда картинку.

судя по вашему коду должно быть как то так:
Java
1
2
3
4
5
6
7
8
9
    ArrayList<ImageView> mImageViews = new ArrayList<>();
    private  void addImage(){
        for (ImageView imageView : mImageViews)
        {
            if(imageView.getDrawable() == null){
                imageView.setImageURI(mUri);
            }
        }
    }
Добавлено через 2 минуты
в вашем случае
Java
1
2
3
4
5
6
    for (int i=0; i>CheckImg.length;i++){
               if(CheckImg[i]){
               CheckImg[i]=true;
               imagesArray[i].setImageURI(mUri);}
 
           }
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 22
27.03.2017, 11:39  [ТС] 7
опечатался в коде там [i] вместо [а], попробуем щас с листом спасибо за совет!!
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
27.03.2017, 13:03 8
Не хотел вмешиваться, но в цикле, когда найдено место и установлена картинка лучше поставить break;, чтобы во все пустые не вставить одну картинку.
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
27.03.2017, 13:08 9
Цитата Сообщение от ExFau$t Посмотреть сообщение
когда найдено место и установлена картинка лучше поставить break
- совершенно верно, не обратил на это внимание. я бы изначально инициализировал как фолс. брейк посреди фор это не очень хорошая практика.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
27.03.2017, 13:15 10
Ну смысл в том, чтобы остановить выполнение после установки картинки, реализация любая на выбор.
1
0 / 0 / 0
Регистрация: 09.03.2017
Сообщений: 22
27.03.2017, 15:21  [ТС] 11
Работает, спасибо всем)
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
27.03.2017, 15:46 12
ну наконец то
1
27.03.2017, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2017, 15:46
Помогаю со студенческими работами здесь

Алгоритм заполнения алфавита
В общем, сказали зашифровать свою фамилию квадратом Полибия. Сделал матрицу - но мне нужно, чтобы...

Алгоритм заполнения области
Заполнить заданную область точками всех возможных цветов в заданном направлении для всех...

Алгоритм заполнения массива
Нижеприведенный код должен зполнять массив с вопросами (q) и ответами (a) из файла . При нажатии на...

Написать программу, обеспечивающую 10 циклов поочередного включения на 1с пар индикаторов
Добрый день форумчане! Есть задание: На языке Ассемблер написать программу, обеспечивающую 10...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru