2013-10-29 14 views
6

Witam Próbuję utworzyć niestandardowy ekran blokady, w którym chcę zamienić slajd w celu odblokowania za pomocą ImageView, jak pokazano na obrazku.Niestandardowe przesuwanie do odblokowania

enter image description here

To co próbowałem do tej pory.

Umieściłem obraz w lewym rogu ekranu i użyłem go w aplikacjiTouchListner do przeciągnięcia kodu poziomego obrazu poniżej.

left_Locker.setOnTouchListener(new OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent event) { 
       int eid = event.getAction(); 
       switch (eid) { 
       case MotionEvent.ACTION_DOWN: 
        toastText.setVisibility(View.VISIBLE); 
        toastText.setTextColor(Color.BLACK); 
        toastText.setText("Slide to Unlock"); 
        break; 
       case MotionEvent.ACTION_MOVE: 
        RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left_Locker.getLayoutParams(); 
        int x = (int) event.getRawX(); 
        mParams.leftMargin = x - 50; 
        left_Locker.setLayoutParams(mParams); 
        break; 
       case MotionEvent.ACTION_UP: 
         toastText.setVisibility(View.GONE); 
         break; 
       default: 
        break; 
       } 
       return true; 
      } 
     }); 

Obraz przesuwa się w poziomie, ale to, czego szukam, pozwala również przeciągnąć tło obrazu tak, jak pokazano na powyższym rysunku. Czy jestem na dobrej drodze, używając ImageView?

Poniżej znajduje się obraz, którego próbowałem.

enter image description here

mogę przesunąć obraz w poziomie, ale jak uzyskać tło jak przewijać ??

+0

Proszę zostaw komentarz. dlaczego jest odrzucony .. jak rozumiem, jest to ważne pytanie programowe –

+0

Hej człowieku, szukam dokładnie tak samo tego samego. możesz mi pomóc? masz na to rozwiązanie? Przechodzę do tego z ostatnich 3 dni różnymi drogami, ale nie dostaję właściwej drogi ani rozwiązania. jak to zrobić, możesz mi pomóc? –

+0

@Jog Guru Również nadal szukam rozwiązania dla tego .. Proszę odpowiedzieć int ten wątek, jeśli znajdziesz jeden Dzięki –

Odpowiedz

0

Myślę, że powinieneś spróbować czegoś takiego jak this.

LUB

jest inny sposób obejścia tego. użyj układu względnego, aby ustawić obraz tła poniżej paska wyszukiwania i uczynić jego pasek postępu przezroczystym, a obraz jako kciuk.

obok ustawić szerokość obrazu w stosunku do SeekBar postępu

LUB nie może być innego rozwiązania, można użyć ontouchlistener na swoim ImageView i zmienić tylko X i pozostawić y sam za każdym razem i zmienić tło jak powyższa metoda.

+0

, jeśli użytkownik kliknie na progressDrawable ruchy kciuka. jak to ograniczyć. Chcę, aby pasek przeszukiwania był przenoszony tylko za pomocą kciuka –

+0

spróbuj wprowadzić warunek w trybie onprogresschange i onstarttracking, aby ustawić postęp do zera, chyba że postęp jest mniejszy niż powiedz 10. – Mayank

+0

czy udało Ci się sprawić, by działał z wzorem lockpattern – Mayank

1

Dokonałem pewnych zmian w kodzie i osiągnąłem.

Poniżej znajduje się kod przesuwania obrazu na końcu ekranu na drugą stronę (Left & Right).

W tym celu należy użyć obrazu 9patch dla obu stron, które mają zostać przesunięte.

public class MainActivity extends Activity implements OnTouchListener { 

ImageView left,right; 
int leftPosition,rightPosition; 
boolean getSize = false; 
int width; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    left = (ImageView)findViewById(R.id.left); 
    right = (ImageView)findViewById(R.id.right); 

    leftPosition = left.getRight(); 
    rightPosition = right.getLeft(); 

    width = getWindowManager().getDefaultDisplay().getWidth(); 

    left.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      int eid = event.getAction(); 
      switch (eid) { 
      case MotionEvent.ACTION_DOWN: 
       /* toastText.setVisibility(View.VISIBLE); 
       toastText.setTextColor(Color.BLACK); 
       toastText.setText("Slide to Unlock");*/ 

       if(!getSize) 
       { 
        leftPosition = left.getRight(); 
        rightPosition = right.getLeft(); 
        getSize =true; 
       } 
       break; 

      case MotionEvent.ACTION_MOVE: 

       RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) left.getLayoutParams(); 
       int x = (int) event.getRawX(); 

       if (x>leftPosition) 
        mParams.width = x; 
       left.setLayoutParams(mParams); 
       break; 

      case MotionEvent.ACTION_UP: 

       RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) left.getLayoutParams(); 
       mParam.width = leftPosition; 
       left.setLayoutParams(mParam); 
       break; 

      default: 
       break; 
      } 
      return true; 
     } 
    }); 


    right.setOnTouchListener(new OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      int eid = event.getAction(); 
      switch (eid) { 
      case MotionEvent.ACTION_DOWN: 
       /* toastText.setVisibility(View.VISIBLE); 
       toastText.setTextColor(Color.BLACK); 
       toastText.setText("Slide to Unlock");*/ 
       break; 

      case MotionEvent.ACTION_MOVE: 

       RelativeLayout.LayoutParams mParams = (RelativeLayout.LayoutParams) right.getLayoutParams(); 
       int x = (int) event.getRawX(); 

       if (x<rightPosition) 
        mParams.width = width-x; 
       right.setLayoutParams(mParams); 
       break; 

      case MotionEvent.ACTION_UP: 
        //toastText.setVisibility(View.GONE); 
       RelativeLayout.LayoutParams mParam = (RelativeLayout.LayoutParams) right.getLayoutParams(); 
       mParam.width = width - rightPosition; 
       right.setLayoutParams(mParam); 
       break; 
      default: 
       break; 
      } 
      return true; 
     } 
    }); 
} 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    return false; 
} } 
+0

@contactmeandroid czy próbowałeś tego? czy może ci się przydać? –