安卓中的“前后”图像比较滑块控件

10

看起来你只需要在滑块值改变时改变图像的Alpha值。 - Phantômaxx
看起来你应该有两个位图(之前和之后)。我会创建一个自定义视图来持有/处理这两个位图,并使用 drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) 方法相应地绘制它们。 - tato.rodrigo
2个回答

10
我已经创建了一个库,用于实现这个功能。也许还有人需要这个功能,对他们会很有帮助。 (链接)
compile 'com.github.developer--:beforeafterslider:1.0.4'

1
Jemo,干得好!我尝试使用你的滑块,真的很棒。不过我发现了一个bug——当我为滑块的两个部分(之前和之后)设置相同的图像时,似乎其中一张图像会变形,就像稍微放大了一样(抱歉在这里写,我没有Github账户)。 - Alexey Chernyavskiy
这是在ClipDrawableProcessorTask.kt中的一行代码: val tmpBitmap = getScaledBitmap(theBitmap) 可能您将其放在那里是为了显示当将滑块的两个部分设置为相同图像时,它们是不同的。所以我对其进行了注释,现在一切都正常了。 "before" 图像在右边,"after" 图像在左边。再次感谢您的工作,真的帮助了我很多来展示一些图像处理效果。 - Alexey Chernyavskiy

6

一种方法是使用一个 seekbar 和一个 framelayout,它位于原始图像之上。当您滑动 seekbar 时,包含第二张图片的帧高度会调整。

从上到下揭示的代码

    private SeekBar seekBar;

protected void onCreate(Bundle savedInstanceState) {下方添加:
seekBar = (SeekBar) findViewById(R.id.seekBar1);

        seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

            int progress = 0;

            @Override

            public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
                FrameLayout target = (FrameLayout) findViewById(R.id.target);

                progress = progresValue;

                ViewGroup.LayoutParams lp = target.getLayoutParams();
                lp.height = progress;
                target.setLayoutParams(lp);

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });

布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_main" tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image"
        android:layout_width="600dp"
        android:layout_height="300dp"
        android:src="@drawable/pug_color"/>
    <FrameLayout
        android:id="@+id/target"
        android:layout_width="600dp"
        android:layout_height="150dp">
        <ImageView
            android:id="@+id/imageb"
            android:layout_width="600dp"
            android:layout_height="300dp"
            android:layout_gravity="center_horizontal"
            android:src="@drawable/pug_bw"/>
    </FrameLayout>

    <SeekBar
        android:id="@+id/seekBar1"
        android:layout_below="@+id/image"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:progress="300"
        android:max="600" />
</RelativeLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接