使用新值更新Glide中的转换

时间:2017-12-11 19:50:33

标签: android image-processing transformation android-glide

我正在使用Glide加载我的Android应用中的图片,我使用bitmapTransform将过滤器应用于位图。有点像图像共享应用程序,您可以在上传新图像时从不同的效果中进行选择。我的问题是,我找不到用新值更新转换的方法。例如,我有“ColorFilter”效果......

Glide.with(context)
     .load(mainPhoto)
     .apply(bitmapTransform(new ColorFilterTransformation(Color.argb(90, 255, 0, 0)))
     .into(base);

这将添加具有极高红色值的滤色器变换。因此,如果用户选择滤色器图像,我将滤色器变换应用于主图像,然后向用户滑块显示红色,绿色和蓝色。我无法弄清楚的是在用户为每种颜色移动滑块后如何更新滤色器变换的值。我希望我在这里有意义,我会做一个简化的布局和代码来帮助说明我想要实现的目标。

因此,假设用户选择了滤镜转换,我将滤镜转换应用于主图像,然后显示每种颜色的滑块......

<LinearLayout
            android:id="@+id/color_options_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_below="@+id/lnl"
            android:orientation="vertical"
            android:visibility="gone">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="8dp"
                    android:id="@+id/seek_red"
                    android:layout_gravity="center_horizontal"
                    android:text="Red"/>
                <SeekBar
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/seekbar_red"
                    android:max="255"
                    android:progress="255"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="8dp"
                    android:layout_gravity="center_horizontal"
                    android:id="@+id/seek_blue"
                    android:text="Blue"/>
                <SeekBar
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/seekbar_blue"
                    android:max="255"
                    android:progress="0"/>
            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_margin="8dp"
                    android:layout_gravity="center_horizontal"
                    android:id="@+id/seek_green"
                    android:text="Green"/>
                <SeekBar
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/seekbar_green"
                    android:max="255"
                    android:progress="0"/>
            </LinearLayout>
        </LinearLayout>

然后在我的代码中,我有on seekbar change listener来检测用户移动滑块..

redBar = findViewById(R.id.seekbar_red);
redBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
    @Override
    public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
        redBarLabel(setText("Red: " + i);
        //Need to update the transformation of the image when the user changes slider here.
    }
    ...
}

我知道处理可能有点多,所以也许我可以将更新添加到事件监听器的“onStopTrackingTouch”部分?无论哪种方式,有没有办法只更新转换的值,或者我需要使用Glide.with(context).load(image).apply(...).into(view); 我每次都需要更新转换?这似乎是非常昂贵和糟糕的用户体验。感谢您的帮助,如果您需要更多代码或任何内容,请询问,我将非常乐意向您展示您需要的任何代码。谢谢。

0 个答案:

没有答案