Размытие и Unblur изображения в сворачивающейся панели инструментов - PullRequest
0 голосов
/ 05 июля 2018

В моем CountryImageInfo.java у меня есть сворачивающаяся панель инструментов с изображением внутри. Вот как это выглядит:

Я хочу знать, как размыть изображение, когда оно сворачивается, и как его размывать, если оно снова падает. Как и в панели уведомлений iOS, я не знаю, знакомы ли вы с ней ... Я видел подобные вопросы, но Разница была в том, что некоторые спрашивали, как размыть, когда она рухнул (не то, что я спрашиваю. Я спрашиваю, как это рушится. Постепенное размытие) ...

Это мой XML , кстати, все заключено в CoordinatorLayout:

<android.support.design.widget.AppBarLayout
    android:id="@+id/testeparainfo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/actionBarDivider">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/backgroundcollapsedtoolbarinfo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:expandedTitleMarginEnd="64dp"
        app:expandedTitleMarginStart="48dp"
        app:layout_scrollFlags="exitUntilCollapsed|scroll">


        <ImageView
            android:id="@+id/imgCountryInfoFoto"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="centerCrop" />

        <ImageView
            android:id="@+id/imgCountryInfoEscuro"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:background="@drawable/background_pais_info"
            android:scaleType="centerInside" />


        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbaridinfo"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            app:layout_collapseMode="pin"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        </android.support.v7.widget.Toolbar>

        <TextView
            android:id="@+id/txtNomePaisInfo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_marginStart="30dp"
            android:layout_marginTop="520dp"
            android:paddingBottom="10dp"
            android:text="TextView"
            android:textColor="@android:color/background_light"
            android:textSize="35sp"
            app:layout_anchor="@+id/testeparainfo"
            app:layout_anchorGravity="left|bottom" />


    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

Обновление:

Дублировать изображение не совсем то, что я хочу, потому что эти изображения немного большие, так есть ли другой способ, кроме дублирования изображений? Я искал некоторые библиотеки, но не смог найти ничего, что соответствовало бы моим потребностям ... Я могу выделить все изображение синим цветом, есть ли способ заставить слушателя начать размытие, когда пользователь перетаскивает свернутую полосу вверх? Пожалуйста, помогите, я много чего перепробовал!

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Я использовал RealtimeBlurView . Чтобы использовать это, внесите изменения в build.gradle вашего модуля приложения.

Добавить зависимости в ваш build.gradle:

dependencies {
    compile 'com.github.mmin18:realtimeblurview:1.1.2'
}
android {
    buildToolsVersion '24.0.2'                 // Use 23.0.3 or higher
    defaultConfig {
        minSdkVersion 15
        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true    // Enable RS support
    }
}

При необходимости добавьте правила proguard:

-класс класса android.support.v8.renderscript. ** {*; }

Затем добавьте следующий вид в ваш CollapsingToolbarLayout

<com.github.mmin18.widget.RealtimeBlurView
            android:id="@+id/blurView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:realtimeBlurRadius="20dp"
            app:realtimeOverlayColor="#8000" />

И в своей деятельности добавьте следующий код.

final AppBarLayout appBar = findViewById(R.id.testeparainfo);
final RealtimeBlurView blurView = findViewById(R.id.blurView);
blurView.setAlpha(1F);
appBar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(final AppBarLayout appBarLayout, final int verticalOffset) {
        float offsetAlpha = (appBarLayout.getY() / appBar.getTotalScrollRange());
        blurView.setAlpha(offsetAlpha * -1);
    }
});

Воспользовался этим ответом

0 голосов
/ 05 июля 2018

Попробуйте Размытую библиотеку Android

@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    double percentage = (double) Math.abs(verticalOffset) / collapsingToolbar.getHeight();
    if (percentage > 0.8) {
        collapsingToolbar.setTitle("Collapsed");
    } else {
        collapsingToolbar.setTitle("Expanded");
    }

Blurry.with(context)
  .radius(10 * percentage)
  .sampling(8)
  .color(Color.argb(66, 255, 255, 0))
  .async()
  .animate(500)
  .onto(blurryImage); // imgCountryInfoEscuro
}
...