получение значений и сохранение в отдельной строке, выбранной из Dynami c Spinner внутри цикла - PullRequest
0 голосов
/ 28 февраля 2020

Я создал a для обнаружения лиц на фотографии, а также добавил динамический c счетчик к представлению, соответствующему количеству обнаруженных лиц, и также добавил значения к счетчику, например, enter image description here

используя этот код

 if (detector.isOperational() && bitmap != null) {
        editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                .getHeight(), bitmap.getConfig());
        float scale = getResources().getDisplayMetrics().density;
        Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.GREEN);
        paint.setTextSize((int) (16 * scale));
        paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(6f);
        Canvas canvas = new Canvas(editedBitmap);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();
        faces = detector.detect(frame);
        txtSampleDesc.setText(null);

        for (int index = 0; index < faces.size(); ++index) {
            Face face = faces.valueAt(index);
            canvas.drawRect(
                    face.getPosition().x,
                    face.getPosition().y,
                    face.getPosition().x + face.getWidth(),
                    face.getPosition().y + face.getHeight(), paint);


            canvas.drawText("Face " + (index + 1), face.getPosition().x + face.getWidth(), face.getPosition().y + face.getHeight(), paint);
            select.setVisibility(View.INVISIBLE);
            txtSampleDesc.setText("Select persons to tag from left to right");
            final Spinner spinner = new Spinner(this);
            spinner.setId(index);

            // names.add(0, "tag for face".concat(String.valueOf(index + 1)));

            ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, names);
            spinner.setAdapter(spinnerArrayAdapter);

            root.addView(spinner);
            tag.setVisibility(View.VISIBLE);
            String face1;
            spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    // Your code here

                }

                public void onNothingSelected(AdapterView<?> adapterView) {
                    return;
                }
            });
            // txtSampleDesc.setText(txtSampleDesc.getText() + "FACE " + (index + 1) + "\n");
            //txtSampleDesc.setText(txtSampleDesc.getText() + "Smile probability:" + " " + face.getIsSmilingProbability() + "\n");
            // txtSampleDesc.setText(txtSampleDesc.getText() + "Left Eye Is Open Probability: " + " " + face.getIsLeftEyeOpenProbability() + "\n");
            //txtSampleDesc.setText(txtSampleDesc.getText() + "Right Eye Is Open Probability: " + " " + face.getIsRightEyeOpenProbability() + "\n\n");

            for (Landmark landmark : face.getLandmarks()) {
                int cx = (int) (landmark.getPosition().x);
                int cy = (int) (landmark.getPosition().y);
                canvas.drawCircle(cx, cy, 8, paint);
            }


        }

        if (faces.size() == 0) {
            txtSampleDesc.setText("Scan Failed: Found nothing to scan");
        } else {
            pic.setImageBitmap(editedBitmap);
            txtSampleDesc.setText(txtSampleDesc.getText() + "No of Faces Detected: " + " " + String.valueOf(faces.size()));
        }
    } else {
        txtSampleDesc.setText("Could not set up the detector!");
    }

Теперь у меня есть кнопка в конце, чтобы получить имена от каждого счетчика, которые указывают на соответствующее лицо, например

String face1 = surya; Строка face2 = jo; и так далее. как это получить;

Я пробовал этот код

public void tag(View v)
{String showallPrompt="";
    int Count = root.getChildCount();
    try {
        for (int cc = 0; cc < Count-1; cc++) {
            View child = root.getChildAt(cc);
            Spinner value = (Spinner)(child.findViewById(cc));
            String spin_value = value.getSelectedItem().toString();

            showallPrompt += spin_value;

        }
    } catch (Exception e) {
    }

Log.d("bb",showallPrompt);
    Toast.makeText(IndexActivity.this,
            showallPrompt,
            Toast.LENGTH_LONG).show();


  } 

, но он дает только нулевую строку. Так что любая идея о том, как получить значения от каждого счетчика и хранить в отдельной строке строка и ключ как (face1, сурйа);

...