组成片段背景的位图在重新加载片段后消失。如果用户转到另一个片段并返回到该片段,则可以正常工作。使用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>
为什么图像视图尺寸太大?您应该首先使用包装内容!