簡體   English   中英

Android-Fragment出現在ImageView后面

[英]Android- Fragment appearing behind ImageView

我在一個活動中有一個ImageView,當你點擊圖像的一部分時,片段會被更新並可見。 這可以按要求工作,但是片段出現在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) & touchX < locationArrayVariable.getXy().get(2) & touchY > locationArrayVariable.getXy().get(1) & touchY < locationArrayVariable.getXy().get(3)){
                    //Log.e(TAG, "Location information for " +  locationArrayVariable.getName()  );


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

                        bundleString = locationArrayVariable.getText();

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }else if(locationArrayVariable.getType()>0 && locationArrayVariable.getType()<3 && (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 && locationArrayVariable.getType()<5 && (cafeButton.getBackgroundTintList().getDefaultColor()==-31949+100 || restaurentButton.getBackgroundTintList().getDefaultColor()==-10879633+100)){

                        fragobject2.updateFragment(bundleString);
                        infoFragementLayout.setVisibility(View.VISIBLE);
                    }else if(locationArrayVariable.getType()>4 && 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() & 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 && 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;
    }
}

看到您的要求,您應該選擇BottomSheetFragment ,這將是您的要求的完美解決方案。

檢查以下鏈接

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

有一種方法可以克服這個問題在主坐標視圖中將其背景顏色設置為白色並使其可單擊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM