@Override public void update(CardDraggableView draggableViewFront, float percentX, float percentY) { CardDraggableView draggableViewBottom = shuffle.getDraggableView(1); if (percentX <= 0) { draggableViewBottom.setOverlayLeftAlpha(1f); draggableViewBottom.setOverlayRightAlpha(0f); } else { draggableViewBottom.setOverlayLeftAlpha(0f); draggableViewBottom.setOverlayRightAlpha(1f); } float percent = Math.abs(percentX); percent = (float) Math.pow(percent, 10); percent = Math.min(0.09f, percent); if(percent == 0f){ ViewCompat.setAlpha(draggableViewBottom.getOverlayView(), 0f); ViewCompat.animate(draggableViewBottom.getContent()).withLayer().setDuration(100).alpha(1f); } else { ViewCompat.animate(draggableViewBottom.getContent()).cancel(); ViewCompat.setAlpha(draggableViewBottom.getContent(), percent); ViewCompat.setAlpha(draggableViewBottom.getOverlayView(), 1f); } } }
void setFirstCardDraggable() { if (!draggableViews.isEmpty()) { currentDraggableView = draggableViews.getFirst(); currentDraggableView.setDraggable(true); currentDraggableView.reset(); currentDraggableView.setDragListener(new DraggableView.DraggableViewListener() { @Override public void onDrag(DraggableView draggableView, float percentX, float percentY) {
@Override protected void onFinishInflate() { super.onFinishInflate(); inflate(getContext(), R.layout.shuffle_card, this); content = (ViewGroup) findViewById(R.id.content); overlay = (ViewGroup) findViewById(R.id.overlay); } }
@Override public void update(CardDraggableView draggableView, float percentX, float percentY) { super.update(draggableView, percentX, percentY); if (percentX < 0) { if (draggableView.getOldPercentX() >= 0) { //percent changed sign draggableView.getOverlayView().setBackgroundColor(draggableView.getColorLeft()); draggableView.setOverlayLeftAlpha(1f); draggableView.setOverlayRightAlpha(0f); } } else { if (draggableView.getOldPercentX() <= 0) { //percent changed sign draggableView.getOverlayView().setBackgroundColor(draggableView.getColorRight()); draggableView.setOverlayLeftAlpha(0f); draggableView.setOverlayRightAlpha(1f); } } ViewCompat.setAlpha(draggableView.getOverlayView(), Math.abs(percentX)); }
public void setOverlayLayouts(int layoutLeftResId, int layoutRightResId) { if (layoutLeftResId != 0) { this.layoutLeftResId = layoutLeftResId; if (overlayLeft != null) { overlay.removeView(overlayLeft); } overlayLeft = LayoutInflater.from(getContext()).inflate(this.layoutLeftResId, overlay, false); if (overlayLeft != null) { overlay.addView(overlayLeft); setOverlayLeftAlpha(0f); } } if (layoutRightResId != 0) { this.layoutRightResId = layoutRightResId; if (overlayRight != null) { overlay.removeView(overlayRight); } overlayRight = LayoutInflater.from(getContext()).inflate(this.layoutRightResId, overlay, false); if (overlayRight != null) { overlay.addView(overlayRight); setOverlayRightAlpha(0f); } } }
if (i < size) { CardDraggableView draggableView = draggableViews.get(i); ViewGroup draggableViewContent = draggableView.getContent(); if (position < itemCount) { draggableView.setVisibility(VISIBLE); int type = shuffleAdapter.getItemViewType(position); draggableView.setVisibility(GONE);
public void resetCard(final CardDraggableView draggableView, int duration) { final int delay = duration; ViewCompat.animate(draggableView.getOverlayView()) .withLayer() .alpha(0) .setListener(new ViewPropertyAnimatorListenerAdapter() { @Override public void onAnimationEnd(View view) { draggableView.setOverlayLeftAlpha(0f); draggableView.setOverlayRightAlpha(0f); } }) .setStartDelay(delay); ViewCompat.animate(draggableView.getContent()) .withLayer() .alpha(1) .setStartDelay(delay); }
CardDraggableView mockDraggableView(){ CardDraggableView draggableView = mock(CardDraggableView.class); given(draggableView.getContent()).willReturn(mock(ViewGroup.class)); return draggableView; }
protected void onViewInflated() { int numberOfCards = shuffleSettings.getNumberOfDisplayedCards(); for (int i = numberOfCards - 1; i >= 0; i--) { CardDraggableView draggableView = generateDraggableView(); draggableView.setDraggable(false); updateDraggableView(draggableView); draggableViews.addFirst(draggableView); addView(draggableView); } notifyDataSetChanged(); }
@Override public boolean animateToOrigin(@NonNull CardDraggableView draggableView, int duration) { boolean animating = super.animateToOrigin(draggableView, duration); if (animating) { ViewCompat.animate(draggableView.getOverlayView()).withLayer().alpha(0f).setDuration(duration); } return animating; }
@Test public void testUpdateAdapter_firstTime() throws Exception { //Given given(shuffleSettings.getNumberOfDisplayedCards()).willReturn(3); shuffle.adapterPosition = 0; CardDraggableView draggableView1 = mockDraggableView(); CardDraggableView draggableView2 = mockDraggableView(); CardDraggableView draggableView3 = mockDraggableView(); shuffle.draggableViews.addAll(Arrays.asList(draggableView1, draggableView2, draggableView3)); Shuffle.Adapter shuffleAdapter = mock(Shuffle.Adapter.class); Shuffle.ViewHolder mockHolder = mock(Shuffle.ViewHolder.class); { given(shuffleAdapter.getItemCount()).willReturn(10); given(shuffleAdapter.getItemViewType(anyInt())).willReturn(1); mockHolder.itemView = mock(View.class); given(shuffleAdapter.onCreateViewHolder(any(ViewGroup.class), anyInt())).willReturn(mockHolder); } //When shuffle.setShuffleAdapter(shuffleAdapter); //Then verify(shuffleAdapter).onCreateViewHolder(eq(draggableView1), anyInt()); verify(shuffleAdapter).onCreateViewHolder(eq(draggableView2), anyInt()); verify(shuffleAdapter).onCreateViewHolder(eq(draggableView3), anyInt()); verify(draggableView1.getContent()).removeAllViews(); verify(draggableView1.getContent()).addView(eq(mockHolder.itemView)); assertThat(mockHolder.position).isEqualTo(2); verify(shuffleAdapter).onBindViewHolder(eq(mockHolder), eq(0)); verify(shuffleAdapter).onBindViewHolder(eq(mockHolder), eq(1)); }
@Test public void testSetFirstCardDraggable() throws Exception { //Given CardDraggableView draggableView1 = mockDraggableView(); CardDraggableView draggableView2 = mockDraggableView(); CardDraggableView draggableView3 = mockDraggableView(); shuffle.draggableViews.addAll(Arrays.asList(draggableView1, draggableView2, draggableView3)); //When shuffle.setFirstCardDraggable(); //Then verify(draggableView1).setDraggable(eq(true)); verify(draggableView1).reset(); verify(draggableView1).setDragListener(any(DraggableView.DraggableViewListener.class)); verify(viewAnimator).updateViewsPositions(eq(0.0f), eq(0.0f)); }