2012-02-27 3 views
1

Прямо сейчас я могу хорошо разбираться с жесткими трюками с размещенным кодом. Но я хочу добавить цвет фона для перехода, когда пользователь перебирает с одного направления на другое. Очень похоже на то, как это делает приложение для контактов с базами данных. Я знаю, что мне придется использовать GestureOverlay, но я не могу понять, как связать это с моим текущим кодом. Возможно ли это, или есть более простой способ сделать это?Добавить цвет градиента для прокручивания жестов

// inside my onCreate method 
    View view = getLayoutInflater().inflate(R.layout.gesture_overlay, null); 
    GestureOverlayView gestureOverlayView = new GestureOverlayView(this); 
    gestureOverlayView.addView(view); 


    mGestureDetector = new GestureDetector(new MyGestureDetector()); 
    mGestureListener = new View.OnTouchListener() { 
     public boolean onTouch(View view, MotionEvent event) { 
      mLongPress = false; 
      return mGestureDetector.onTouchEvent(event); 
     } 
    }; 

    // mListView.setOnItemClickListener(this); 
    mListView.setOnTouchListener(mGestureListener); 
} 


class MyGestureDetector extends SimpleOnGestureListener { 
    private static final int SWIPE_MIN_DISTANCE  = 120; 
    private static final int SWIPE_MAX_OFF_PATH  = 200; 
    private static final int SWIPE_THRESHOLD_VELOCITY = 200; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) { 
     return false; 
    } 
    // right to left swipe 
    if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
      && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
     return true; 
    } else 
     if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
       && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; 
     } 

    return false; 
} 

}

enter image description here

+0

Вы решили эту проблему ?? и если да, то plz дать мне некоторый намек bcoz, я должен сделать именно так, спасибо заранее ..... –

ответ

0

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

Вы можете получить эти фотографии от декомпилируют APK файл с apktool

+0

да, это телефон галактики samsung. Я загрузил apktool, вы помните расположение изображений? – Justin

+0

Пришлите мне файл apk, и я пришлю вам фотографии. ufo222940268 AT gmail.com –

+0

Просто находится под '/ res/drawable-mdpi' или'/res/drawable'. –

3

Я создал решение, которое работало для меня до сих пор ...

создать для элемента списка в flipperview так:

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/listItemViewFlipper" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<!-- ViewFlipper Child 1 --> 
<RelativeLayout 
android:id="@+id/listItem" 
android:layout_width="match_parent" 
android:layout_height="80dip"  
android:padding="4dip"  
android:background="@drawable/list_item_background" 
> 

<TextView 
    android:id="@+id/productName"   
    android:singleLine="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" 
    android:gravity="left|center_vertical" 
    android:text="" 
    android:textColor="#FFFFFF"/> 
<TextView 
    android:id="@+id/short_description" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"   
    android:text="short description" 
    android:gravity="left" 
    android:layout_below="@id/productName" 
    />  
<EditText 
    android:id="@+id/editValue"  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"      
    android:hint="@string/value" 
    android:layout_alignParentRight="true" 
    android:layout_alignBaseline="@id/productName" 
    android:textColorHint="#FFFFFF" 
    android:text="" 
    android:singleLine="true" 
    android:inputType="number" 
    android:textColor="#FFFFFF" 
    android:maxLength="2"  
    /> 
     <TextView 
    android:id="@+id/productPrice"  
    android:layout_height="wrap_content"  
    android:layout_width="wrap_content" 
    android:paddingRight="8dip"  
    android:layout_toLeftOf="@id/editValue"     
    android:text="€3,40" 
    android:textSize="20sp" 
    android:textColor="#FFFFFF" 
    /> 

</RelativeLayout> 

<!-- Transition views --> 
<!-- ViewFlipper Child 2 --> 
<LinearLayout 
    android:id="@+id/transitionViewAdd" 
    android:layout_width="match_parent" 
    android:layout_height="80dip" 
    android:padding="4dip"  
    android:background="@drawable/list_item_swipe"    
    android:orientation="horizontal" 
> 
    <TextView 
     android:id="@+id/swipe_transition_textview_add" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="1"      
     android:gravity="center" 
     android:textSize="25sp"  
     android:textColor="#FFFFFF" 
     android:text="@string/swipe_transition_text_add"    
    /> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="center" 
     android:src="@drawable/content_new" 
    /> 

</LinearLayout> 
<!-- ViewFlipper Child 3 --> 
<LinearLayout 
    android:id="@+id/transitionViewRemove" 
    android:layout_width="match_parent" 
    android:layout_height="80dip"   
    android:background="#ff7978"   
    android:orientation="horizontal" 
> 
<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:layout_gravity="center" 
     android:src="@drawable/ic_action_remove"    
/> 
<TextView 
     android:id="@+id/swipe_transition_textview_remove" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:textSize="25sp"  
     android:textColor="#FFFFFF" 
     android:text="@string/swipe_transition_text_remove"     
    /> 
</LinearLayout> 
</ViewFlipper> 

Набор для фона flipperview градиента, как показано ниже:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <gradient android:startColor="#FF0000" 
       android:endColor="@android:color/transparent" 
       android:angle="0"/>   
    <corners android:radius="3dp"/>   
</shape> 

сейчас в GestureDetector когда ударяя изменить FlipperView к View вы хотите. (я предполагаю, что вы используете MotionEvent для обработки различных состояний прикосновения)

case MotionEvent.ACTION_MOVE:{   
     float deltaX = motionEvent.getRawX() - mDownX; 
     int deltaXRound = Math.round(deltaX); 
     float deltaY = motionEvent.getRawY() - mDownY; 
     if(mVelocityTracker == null || mPaused){ 
      break; 
     } 

     if(Math.abs(deltaY) > Math.abs(deltaX)){     
      return false; 
     } 

     mVelocityTracker.addMovement(motionEvent);   
     if (Math.abs(deltaX) > mSlop) { 
      mSwiping = true;          
      mListView.requestDisallowInterceptTouchEvent(true); 
     } 

    // Cancel ListView's touch (un-highlighting the item) 
     MotionEvent cancelEvent = MotionEvent.obtain(motionEvent); 
     cancelEvent.setAction(MotionEvent.ACTION_CANCEL | 
       (motionEvent.getActionIndex() 
         << MotionEvent.ACTION_POINTER_INDEX_SHIFT)); 
     mListView.onTouchEvent(cancelEvent); 
     cancelEvent.recycle();   

     if(deltaX > 0 && mSwiping){        
        mViewFlipper.setDisplayedChild(mViewFlipper.indexOfChild(mViewFlipper.findViewById(R.id.transitionViewAdd))); 
      mCurrentFlipperView = mViewFlipper.getCurrentView(); 

      Drawable background = mCurrentFlipperView.getBackground(); 
      background.setBounds(0, 0, deltaXRound, mCurrentFlipperView.getHeight()); 
      background.invalidateSelf(); 

сейчас .. вещь, которая делает трюк заключается в использовании метода setBounds установить границы фона вашего ListItem

Drawable background = mCurrentFlipperView.getBackground(); 
background.setBounds(0, 0, deltaXRound, mCurrentFlipperView.getHeight()); 
background.invalidateSelf(); 

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

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