2015-10-29 9 views
5

Czy istnieje możliwość skonstruowania sterowania przesuwaniem obrazu w systemie Android, tak jak w HTML 5?Porównanie zdjęć "Przed i po" Sterowanie przesuwaniem w systemie Android

http://thenewcode.com/819/A-Before-And-After-Image-Comparison-Slide-Control-in-HTML5

Jak mogę osiągnąć ten rzecz?

+0

wystarczy zmienić wartość alfa obrazu po zmianie wartości Slider. –

+0

Wygląda na to, że powinieneś mieć 2 mapy bitowe (przed i po). Utworzyłem niestandardowy widok, który przechwytuje/obsługuje te 2 bitmapy i rysuje je odpowiednio za pomocą 'drawBitmap (Bitmap bitmap, Rect src, Rect dst, Paint paint)'. –

Odpowiedz

4

Jednym ze sposobów jest użycie paska wyszukiwania i frarmayout, który znajduje się na oryginalnym obrazku. Podczas przesuwania paska wyszukiwania dopasowuje się wysokość klatek, która zawiera drugie zdjęcie.

Kod góry na dół objawić

private SeekBar seekBar; 

pod protected void onCreate(Bundle savedInstanceState) {

dodać

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) { 

      } 
     }); 

układ

<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> 
5

Stworzyłem library dla tej funkcji, ktoś, kto stal może potrzebować tej funkcji, będzie dla nich dobre Wydaje

compile 'com.github.developer--:beforeafterslider:1.0.4' 
+1

Jemo, świetna robota! Próbowałem użyć twojego suwaka, jest naprawdę świetny. Znalazłem jednak jeden błąd - gdy ustawiam ten sam obraz dla obu części suwaka (przed i po), wydaje się, że jedno z obrazów zostaje zniekształcone, jakby było lekko powiększone (przykro mi pisać tutaj, nie mam Konto Github). – Lelik

+0

dziękuję, sprawdzę tak szybko jak to możliwe –

+0

To jest linia val tmpBitmap = getScaledBitmap (theBitmap) w ClipDrawableProcessorTask.kt Prawdopodobnie umieścisz to tam, aby pokazać, że obrazy są różne, gdy ustawiasz obie części suwak do tego samego obrazu. Więc skomentowałem to i teraz wszystko działa dobrze. Obraz "przed" znajduje się po prawej stronie, "po" po lewej. Ponownie, dzięki za twoją pracę, bardzo mi pomogło zademonstrować efekty przetwarzania obrazu. – Lelik

Powiązane problemy