настройка индикатора выполнения с помощью изображения Gif не работает на некоторых устройствах - PullRequest
0 голосов
/ 20 сентября 2019

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

из

, если у кого-то есть идея использовать gif-файл на индикаторе выполнения, пожалуйста, поделитесь со мной.

.java

public static void displayProgressDialog(Context context, boolean cancellable) {
        ImageView imageView;

        if(context == null || (context instanceof AppCompatActivity && ((AppCompatActivity)context).isFinishing()))
            return;
        if(cancellable) {
            if (context instanceof AppCompatActivity && view == null) {

                AppCompatActivity activity = (AppCompatActivity) context;
                view = activity.getLayoutInflater().inflate(R.layout.layout_dialog_loading, null);
                ViewGroup.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                activity.addContentView(view, params);
            }
        }
        else {
            if(progressDialog != null) return;
            progressDialog = new AlertDialog.Builder(context,R.style.MyTheme).create();
            FrameLayout f1 = new FrameLayout(context);
            progressDialog.setView(f1);
            progressDialog.getLayoutInflater().inflate(R.layout.layout_dialog_loading, f1);
            progressDialog.setCancelable(false);
//        progressDialog.setIndeterminate(false);
//        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.show();
        }
    }

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <ProgressBar
        android:id="@+id/progress"
        android:indeterminate="true"
        android:indeterminateTint="@color/bgColorDefault"
        android:indeterminateDrawable="@drawable/myprogress_interminate"
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

вращение

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/animation"
    android:pivotX="50%"
    android:pivotY="50%" />

наконец-то здесь анимация

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1"
    android:toDegrees="360"
    android:drawable="@drawable/spinnerinstacare">
</rotate>

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

Сначала создайте лучший GIF

Если вы хотите показать GIF внутри custom dialog в центре экрана, используйте следующий код:

Используйте этот статический метод:

public static void showProgress(Context context) {  
    Dialog progressDialog = new Dialog(context, R.style.AppThemeDialog);
    progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    progressDialog.setContentView(R.layout.progers_layout);
    WindowManager.LayoutParams wmlp = progressDialog.getWindow().getAttributes();
    wmlp.gravity = Gravity.CENTER | Gravity.CENTER;
    wmlp.width = ViewGroup.LayoutParams.MATCH_PARENT;
    wmlp.height = ViewGroup.LayoutParams.MATCH_PARENT;
    progressDialog.setCanceledOnTouchOutside(false);
    progressDialog.setCancelable(false);
    progressDialog.show();
}

Макет прогресса:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

        <ImageView
            android:id="@+id/img_anim"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"/>
</RelativeLayout>

Используйте Glide так:

ImageView imageView = (ImageView) findViewById(R.id.imageView);
Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);

Тогда вы можете использовать Glide загрузить GIF.

0 голосов
/ 20 сентября 2019

Я думаю, это потому, что на некоторых устройствах можно изменить attrs для ширины и высоты системы по умолчанию.Что может повлиять на некоторые виджеты, такие как ProgressBar.Вам необходимо указать точный размер элемента в макете.

Или просто используйте ImageView с Glide, чтобы показать gif, во время загрузки, с очень простой настройкой.

dependencies {
  implementation 'com.github.bumptech.glide:glide:4.0.0'
}

И использование:

Glide.with(context).load(GIF_URI)
    .into(new GlideDrawableImageViewTarget(IMAGE_VIEW));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...