1

У меня есть относительная компоновка и на этом относительном макете. Я обработал прокрутку справа налево и успешно проводил события слева направо, используя следующий код.Как изменить цвет фона во время прокрутки на вид?

relativeLayout1.setOnTouchListener(new View.OnTouchListener() 
    { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return gesture.onTouchEvent(event); 
     } 
    }); 


final GestureDetector gesture = new GestureDetector(getActivity(), 
     new GestureDetector.SimpleOnGestureListener() { 

      @Override 
     public boolean onDown(MotionEvent e) { 
       return true; 
      } 
     public boolean onDoubleTap(MotionEvent e) {return true;} 
     public void onLongPress(MotionEvent e) {} 
     public boolean onDoubleTapEvent(MotionEvent e) {return true;} 
     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {return true;} 
     public void onShowPress(MotionEvent e) {} 
     public boolean onSingleTapConfirmed(MotionEvent e) {return true;} 
     public boolean onSingleTapUp(MotionEvent e) {return true;} 
      @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
       float velocityY) { 

       final int SWIPE_MIN_DISTANCE = 5; 
       final int SWIPE_MAX_OFF_PATH = 400; 
       final int SWIPE_THRESHOLD_VELOCITY = 100; 
       try { 
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
         return false; 
        if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE// user slide right to left 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
         Log.i("Mhd", "Right to Left"); 

        } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE//user slide left to right 
         && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
         Log.i("Mhd", "Left to Right"); 
        } 
       } catch (Exception e) { 

       } 
       return super.onFling(e1, e2, velocityX, velocityY); 
      } 
     }); 

Но мне действительно нужно цвет относительного изменения макета на основе того, где мой палец прибыл в то время как я ударяя по этому относительному макет, например, когда вы пытаетесь вызвать кого-нибудь ваш Android устройство вы проведите пальцем по экрану слева направо и вы заметите, что цвет меняется в зависимости от того, где ваш палец прибыл в контакт.

+0

не установленBackgroud [Drawable]() работа? – pskink

ответ

0

Следующий пример точно похожи на устройства Samsung, которые Swipe слева направо и изменения цвета на основе того, где ваш палец прибыл на просмотр контакта. и проведите пальцем справа налево, чтобы отправить сообщение

Во-первых, ваш XML для этой части должен выглядеть следующим образом:

<RelativeLayout 
android:id="@+id/YourRelativeLayout" 
android:layout_width="match_parent" 
android:layout_height="0dp" 
android:layout_weight="1.27" 
android:background="#234c5e" 
android:orientation="horizontal" 
android:focusable="true" 
android:focusableInTouchMode="true"> 
<LinearLayout 
    android:id="@+id/slideColorFromLiftToRightLayout" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:background="@drawable/color_green" 
    android:orientation="horizontal"> 

</LinearLayout> 

<LinearLayout 
    android:id="@+id/slideColorFromRightToLiftLayout" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:background="@drawable/yalow" 
    android:orientation="horizontal" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true"> 
</LinearLayout> 

</RelativeLayout> 

, то вы можете использовать этот фрагмент кода, чтобы проверить направление скольжения и изменить ширину цветной макет.

int x1,x2,x3,halfOfWidth = 0; 
YourRelativeLayout.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent event) { 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_MOVE: 
       Log.d("Mhd", "ACTION_MOVE:event.getX() =============> " + event.getX()); 
       Log.d("Mhd", "ACTION_MOVE:event.getRawX() " + event.getRawX()); 

       x2 = (int) event.getRawX(); 

       if (x1 < halfOfWidth && x2 > x1) { 
        /// here check if there user slide from lift to write 
        slideColorFromLiftToRightLayout.requestLayout(); 
        slideColorFromLiftToRightLayout.getLayoutParams().width = (int) event.getX(); 
       } 

       if (x1 > halfOfWidth && x2 < x1) { 
        slideColorFromRightToLiftLayout.requestLayout(); 
        slideColorFromRightToLiftLayout.getLayoutParams().width = (halfOfWidth * 2) - (int) event.getX(); 
       } 
       return true; 
      case MotionEvent.ACTION_UP: 

       // this event occure after the user release his finger 

        x3 = (int) event.getX(); 
//     slideColorFromLiftToRightLayout.getLayoutParams().width = 0; to clear the color of L to R 
//     slideColorFromRightToLiftLayout.getLayoutParams().width = 0; to clear the color of R to L 
        return true; 

      case MotionEvent.ACTION_DOWN: 
       // when user put his finger on screen 
       x1 = (int) event.getX(); 
       halfOfWidth = AnswerRelativeLayout.getWidth()/2; 
       return true; 
     } 
     return false; 
    } 
}); 
0

использовать XML-селектор, как этот

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/button_background_normal"/> 
    <item android:drawable="@drawable/button_background_touched" android:state_hovered="true"/>  
</selector> 
+0

Извините, но где я могу поместить этот фрагмент кода? – DevMhd

+0

создать файл XML в папке «drawable», например. а именно «button_background.xml», а затем установите android: background = «@ drawable/button_background» в RelativeLayout, вы хотите применить это поведение. –

+0

Спасибо за повтор. Я сделал, когда вы пишете только изменения фона, а не то, что я хочу. Но я хочу, пока вы переключаетесь на Relative layout, меняете цвет фона места под и перед моим пальцем, когда вы пытаетесь пронестись слева направо, чтобы вызвать кого-то из вашего контакта в вашем устройстве Android. – DevMhd

Смежные вопросы