Android- Фрагмент, появляющийся за ImageView

#java #android #xml #android-fragments

#java #Android #xml #android-фрагменты

Вопрос:

У меня есть ImageView в activity, когда вы нажимаете на часть изображения, фрагмент обновляется и становится видимым. Это работает так, как требуется, однако фрагмент появляется за ImageView. Поэтому я не могу его видеть. Я хочу, чтобы фрагмент отображался в нижней трети представления. Кто-нибудь может подсказать, почему это происходит?

.xml-файл

  <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:design="http://schemas.android.com/apk/res-auto">



<ImageView
    android:id="@ id/limerickMapImageView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:src="@drawable/limerickmap" />

<android.support.design.widget.FloatingActionButton
    android:id="@ id/centreButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_margin="16dp"
    android:src="@drawable/centre"
    app:backgroundTint="@color/linkBlue" />



<LinearLayout
    android:id="@ id/infoFragmentLayout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
    android:visibility="invisible"
     >

    <fragment
        android:id="@ id/infoFragment"
        class="com.codingwithmitch.googlemaps2018.ui.LocationInfoFragment"
        android:layout_width="fill_parent"
        android:layout_height="300dp"
        android:layout_gravity="bottom"
        app:layout_anchorGravity="center_vertical" />
</LinearLayout>
  

Это фрагмент из моего onCreate из действия, в котором я делаю фрагмент видимым

   photoview2.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            touchX = (int) event.getX();
            touchY = (int) event.getY();
            LocationInfoFragment fragobject2 = (LocationInfoFragment) getSupportFragmentManager().findFragmentById(R.id.infoFragment) ;
            LinearLayout infoFragementLayout = (LinearLayout) findViewById(R.id.infoFragmentLayout);
            //LinearLayout infoFragementLayout = (LinearLayout) findViewById(R.id.infoFragmentLayout);
            infoFragementLayout.setVisibility(View.INVISIBLE);
            for (InfoLocationInformation locationArrayVariable : mInfoLocationInformations) {
                if(touchX > locationArrayVariable.getXy().get(0) amp; touchX < locationArrayVariable.getXy().get(2) amp; touchY > locationArrayVariable.getXy().get(1) amp; touchY < locationArrayVariable.getXy().get(3)){
                    //Log.e(TAG, "Location information for "    locationArrayVariable.getName()  );


                    if(locationArrayVariable.getType()<1 amp;amp; infoButton.getBackgroundTintList().getDefaultColor()==-49023 100){

                        bundleString = locationArrayVariable.getText();

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }else if(locationArrayVariable.getType()>0 amp;amp; locationArrayVariable.getType()<3 amp;amp; (barButton.getBackgroundTintList().getDefaultColor()==-524991 100 || restaurentButton.getBackgroundTintList().getDefaultColor()==-10879633 100)){
                        bundleString =locationArrayVariable.getText();

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }else if(locationArrayVariable.getType()>2 amp;amp; locationArrayVariable.getType()<5 amp;amp; (cafeButton.getBackgroundTintList().getDefaultColor()==-31949 100 || restaurentButton.getBackgroundTintList().getDefaultColor()==-10879633 100)){

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }else if(locationArrayVariable.getType()>4 amp;amp; cafeButton.getBackgroundTintList().getDefaultColor()==-31949 100){

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }


                }
            }
            Log.e(TAG, "touch coordinates X"   touchX  " Y "  touchY  );
            ImageView view = (ImageView) v;
            view.bringToFront();
            viewTransformation(view, event);
            return true;
        }
    });
  

У меня есть эта функция события движения, которая позволяет мне увеличивать и уменьшать масштаб и перемещаться по imageview в действии.

     private void viewTransformation(View view, MotionEvent event) {

    switch (event.getAction() amp; MotionEvent.ACTION_MASK) {

        case MotionEvent.ACTION_DOWN:

            centreCheck =false;
            xCoOrdinate = view.getX() - event.getRawX();
            yCoOrdinate = view.getY() - event.getRawY();

            start.set(event.getX(), event.getY());
            isOutSide = false;
            mode = DRAG;
            lastEvent = null;
            break;
        case MotionEvent.ACTION_POINTER_DOWN:
            centreCheck =false;
            oldDist = spacing(event);
            if (oldDist > 10f) {
                midPoint(mid, event);
                mode = ZOOM;
            }

            lastEvent = new float[4];
            lastEvent[0] = event.getX(0);
            lastEvent[1] = event.getX(1);
            lastEvent[2] = event.getY(0);
            lastEvent[3] = event.getY(1);
            d = rotation(event);
            break;
        case MotionEvent.ACTION_UP:
            centreCheck =false;
            isZoomAndRotate = false;
            if (mode == DRAG) {
                float x = event.getX();
                float y = event.getY();
            }
        case MotionEvent.ACTION_OUTSIDE:
            centreCheck =false;
            isOutSide = true;
            mode = NONE;
            lastEvent = null;
        case MotionEvent.ACTION_POINTER_UP:
            centreCheck =false;
            mode = NONE;
            lastEvent = null;
            break;

        case MotionEvent.ACTION_MOVE:
            centreCheck =false;
            if (!isOutSide) {
                if (mode == DRAG) {
                    isZoomAndRotate = false;
                    view.animate().x(event.getRawX()   xCoOrdinate).y(event.getRawY()   yCoOrdinate).setDuration(0).start();
                }
                if (mode == ZOOM amp;amp; event.getPointerCount() == 2) {
                    float newDist1 = spacing(event);
                    if (newDist1 > 10f) {
                        float scale = newDist1 / oldDist * view.getScaleX();
                        view.setScaleX(scale);
                        view.setScaleY(scale);
                    }
                    if (lastEvent != null) {
                        newRot = rotation(event);
                        view.setRotation((float) (view.getRotation()   (newRot - d)));
                    }
                }
            }
            break;
    }
}
  

Ответ №1:

Видя ваше требование, вы должны выбрать BottomSheetFragment , это будет идеальным решением для вашего требования.

Проверьте следующую ссылку

https://www.androidhive.info/2017/12/android-working-with-bottom-sheet/

Комментарии:

1. Это довольно приятно, но по умолчанию он по-прежнему находится за моим imageview

2. можете ли вы поделиться snap?

3. У меня нет такой привилегии, я просто не могу видеть фрагмент / нижнюю таблицу, потому что imageview блокирует его. Я считаю, что raj в другом ответе находится на правильном пути. это может быть потому, что у меня есть прослушиватель щелчков при просмотре изображения.

Ответ №2:

Есть способ, которым вы можете преодолеть это, в главном представлении координат установить цвет фона как белый и сделать его интерактивным

Комментарии:

1. основной вид координат? это мой файл макета активности?

2. какой бы XML ни был размещен сверху, сделайте его интерактивным и установите фон таким белым, как #fff