重新加载片段时消失位图

问题描述 投票:0回答:1

组成片段背景的位图在重新加载片段后消失。如果用户转到另一个片段并返回到该片段,则可以正常工作。使用Android导航重新加载-使用对同一片段的导航调用。图形代码用于减小位图大小,以减少堆空间的使用。

这是片段代码:

public class HomeFragment extends Fragment {

    public static HomeFragment getInstance() {
        return new HomeFragment();
    }
    private Unbinder unbinder;
    private Bitmap bgImage;

    @Override
    public View onCreateView(@NotNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        unbinder = ButterKnife.bind(this, view);
        return view;
    }

    private Bitmap ARGBBitmap(Bitmap img) {
        return img.copy(Bitmap.Config.RGB_565,true);
    }

    private static Bitmap drawableToBitmap(Drawable drawable) {
        Bitmap bitmap;
        if (drawable instanceof BitmapDrawable) {
            BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
            if(bitmapDrawable.getBitmap() != null) {
                return bitmapDrawable.getBitmap();
            }
        }

        if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
            bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); // Single color bitmap will be created of 1x1 pixel
        } else {
            bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        }

        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return bitmap;
    }

    @Override
    public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        initUI();
    }

    public void initUI(){
        if(bgImage == null){
            Drawable bghomepageDrawable = ContextCompat.getDrawable(requireActivity(), R.drawable.bghomepage);
            Bitmap bgBitMap = drawableToBitmap(bghomepageDrawable);
            bgImage = ARGBBitmap(bgBitMap);
        }

        ImageView imageView = requireActivity().findViewById(R.id.rosebgsignout);
        imageView.setImageBitmap(bgImage);
    }


    @Override
    public void onDestroyView() {
        Timber.v("Home onDestroyView");
        unbinder.unbind();
        super.onDestroyView();
    }

}

这里是XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/bgGray">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayout2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">


        <TextView
            android:id="@+id/welcome"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:fontFamily="sans-serif-medium"
            android:letterSpacing=".05"
            android:text="@string/bienvenido"
            android:textColor="@color/white"
            android:textSize="50sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.56"
            app:layout_constraintLeft_toLeftOf="parent"

            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/userName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif-medium"
            android:text=""
            android:textColor="@color/white"
            android:textSize="40sp"
            app:layout_constraintHorizontal_bias="0.56"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"

            app:layout_constraintTop_toBottomOf="@id/welcome" />


        <com.google.android.material.button.MaterialButton
            android:id="@+id/createCrashlyticsReport"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal|bottom"
            android:layout_marginBottom="36dp"
            android:backgroundTint="@color/deep_red"
            android:fontFamily="sans-serif-medium"
            android:gravity="center"
            android:paddingTop="15dp"
            android:paddingBottom="15dp"
            android:text="@string/aviso_de_error"
            android:textSize="16sp"
            app:cornerRadius="3dp"
            app:icon="@drawable/ic_lab"
            app:iconGravity="textStart"
            app:iconSize="16dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.5"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintWidth_percent="0.5" />


        <ImageView
            android:id="@+id/rosebgsignout"
            android:layout_width="2400dp"
            android:layout_height="1350dp"
            android:cropToPadding="false"
            android:elevation="-1dp"
            android:visibility="visible"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:contentDescription="@string/background_image_home" />

    </androidx.constraintlayout.widget.ConstraintLayout>


</LinearLayout>
android android-fragments android-bitmap android-navigation-graph android-graphics
1个回答
0
投票

为什么图像视图尺寸太大?您应该首先使用包装内容!

© www.soinside.com 2019 - 2024. All rights reserved.