Skip to content

Commit 11436f7

Browse files
committed
add position changed listener
1 parent 437d791 commit 11436f7

File tree

3 files changed

+67
-9
lines changed

3 files changed

+67
-9
lines changed

cardstackview/src/main/java/me/brucezz/cardstackview/CardFactory.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.view.ViewGroup;
66
import java.util.ArrayList;
77
import java.util.Collections;
8+
import java.util.List;
89

910
/**
1011
* Created by brucezz on 2016-10-12.
@@ -85,4 +86,13 @@ public void swapRealIndex(int one, int another) {
8586
mCardHolders.get(one).mRealIndex = one;
8687
mCardHolders.get(another).mRealIndex = another;
8788
}
89+
90+
public List<Integer> getAllPosition() {
91+
List<Integer> all = new ArrayList<>();
92+
for (CardHolder holder : mCardHolders) {
93+
all.add(holder.mChildIndex);
94+
}
95+
96+
return all;
97+
}
8898
}

cardstackview/src/main/java/me/brucezz/cardstackview/CardStackView.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import android.view.View;
1212
import android.view.ViewGroup;
1313
import android.view.animation.OvershootInterpolator;
14+
import java.util.List;
1415

1516
/**
1617
* Created by brucezz on 2016-10-08.
@@ -30,7 +31,8 @@ public class CardStackView extends ViewGroup {
3031

3132
private ViewDragHelper mViewDragHelper;
3233
private GestureDetectorCompat mGestureDetector;
33-
private onCardClickListener mOnCardClickListener;
34+
private OnCardClickListener mOnCardClickListener;
35+
private OnPositionChangedListener mOnPositionChangedListener;
3436
/**
3537
* 阻力滑动计算
3638
*/
@@ -126,6 +128,9 @@ public void onViewPositionChanged(View changedView, int left, int top, int dx, i
126128
mCardFactory.findByRealIndex(holder.mRealIndex + directionFlag).onSwap(holder);
127129

128130
mCardFactory.swapRealIndex(holder.mRealIndex, holder.mRealIndex + directionFlag);
131+
if (mOnPositionChangedListener != null) {
132+
mOnPositionChangedListener.onPositionChanged(mCardFactory.getAllPosition());
133+
}
129134
}
130135
}
131136
};
@@ -284,10 +289,14 @@ public void setAdapter(CardAdapter adapter) {
284289
}
285290
}
286291

287-
public void setOnCardClickListener(onCardClickListener listener) {
292+
public void setOnCardClickListener(OnCardClickListener listener) {
288293
this.mOnCardClickListener = listener;
289294
}
290295

296+
public void setOnPositionChangedListener(OnPositionChangedListener onPositionChangedListener) {
297+
mOnPositionChangedListener = onPositionChangedListener;
298+
}
299+
291300
/**
292301
* 重置卡片间距
293302
*/
@@ -305,7 +314,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
305314
spanResetAnimator.start();
306315
}
307316

308-
public interface onCardClickListener {
317+
public interface OnCardClickListener {
309318

310319
/**
311320
* @param view 被点击的 View
@@ -315,6 +324,13 @@ public interface onCardClickListener {
315324
void onClick(View view, int realIndex, int initialIndex);
316325
}
317326

327+
public interface OnPositionChangedListener {
328+
void onPositionChanged(List<Integer> position);
329+
}
330+
331+
332+
333+
318334
private class CardStackViewDataObserver extends DataSetObserver {
319335
@Override
320336
public void onChanged() {

sample/src/main/java/me/brucezz/sample/MainActivity.java

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package me.brucezz.sample;
22

33
import android.os.Bundle;
4+
import android.os.Handler;
5+
import android.os.Message;
46
import android.support.v7.app.AppCompatActivity;
7+
import android.util.Log;
58
import android.view.Menu;
69
import android.view.MenuItem;
710
import android.view.View;
@@ -16,19 +19,44 @@ public class MainActivity extends AppCompatActivity {
1619
SimpleCardAdapter mCardAdapter;
1720
private List<Card> mCards;
1821

22+
private Handler mHandler = new Handler() {
23+
@Override
24+
public void handleMessage(Message msg) {
25+
super.handleMessage(msg);
26+
modifyData();
27+
mHandler.sendEmptyMessageDelayed(0, 2000);
28+
}
29+
};
30+
31+
@Override
32+
protected void onDestroy() {
33+
super.onDestroy();
34+
mHandler.removeMessages(0);
35+
}
36+
1937
@Override
2038
protected void onCreate(Bundle savedInstanceState) {
2139
super.onCreate(savedInstanceState);
2240
setContentView(R.layout.activity_main);
2341

2442
mCardStackView = (CardStackView) findViewById(R.id.card_stack_view);
25-
mCardStackView.setOnCardClickListener(new CardStackView.onCardClickListener() {
43+
mCardStackView.setOnCardClickListener(new CardStackView.OnCardClickListener() {
2644
@Override
2745
public void onClick(View view, int realIndex, int initialIndex) {
2846
Toast.makeText(MainActivity.this, "点击了第" + realIndex + "个卡片 => " + mCards.get(initialIndex).mTitle,
2947
Toast.LENGTH_SHORT).show();
3048
}
3149
});
50+
mCardStackView.setOnPositionChangedListener(new CardStackView.OnPositionChangedListener() {
51+
@Override
52+
public void onPositionChanged(List<Integer> position) {
53+
StringBuilder sb = new StringBuilder();
54+
for (Integer integer : position) {
55+
sb.append(integer).append(" ");
56+
}
57+
Log.d("TAG", "onPositionChanged: " + sb.toString());
58+
}
59+
});
3260

3361
mCards = fakeCards();
3462
mCardAdapter = new SimpleCardAdapter(this, mCards);
@@ -44,7 +72,7 @@ private List<Card> fakeCards() {
4472

4573
@Override
4674
public boolean onCreateOptionsMenu(Menu menu) {
47-
menu.add(1, 1, 1, "修改数据");
75+
menu.add(1, 1, 1, "定时2s修改数据");
4876
menu.add(1, 2, 1, "重置");
4977
return super.onCreateOptionsMenu(menu);
5078
}
@@ -53,15 +81,19 @@ public boolean onCreateOptionsMenu(Menu menu) {
5381
public boolean onOptionsItemSelected(MenuItem item) {
5482
switch (item.getItemId()) {
5583
case 1:
56-
for (Card card : mCards) {
57-
card.mTitle += "X";
58-
}
59-
mCardAdapter.notifyDataSetChanged();
84+
mHandler.sendEmptyMessageDelayed(0, 2000);
6085
break;
6186
case 2:
6287
recreate();
6388
break;
6489
}
6590
return super.onOptionsItemSelected(item);
6691
}
92+
93+
private void modifyData() {
94+
for (int i = 0; i < mCards.size(); i++) {
95+
mCards.get(i).mTitle += String.valueOf(i);
96+
}
97+
mCardAdapter.notifyDataSetChanged();
98+
}
6799
}

0 commit comments

Comments
 (0)