Skip to content

Commit a3b200d

Browse files
committed
修改
1 parent 1222cc7 commit a3b200d

File tree

6 files changed

+75
-49
lines changed

6 files changed

+75
-49
lines changed

.classpath

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry kind="src" path="src"/>
4-
<classpathentry kind="src" path="gen"/>
53
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
64
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
75
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
6+
<classpathentry kind="src" path="src"/>
7+
<classpathentry kind="src" path="gen"/>
88
<classpathentry kind="output" path="bin/classes"/>
99
</classpath>

res/layout/item_layout.xml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212
android:padding="20dp"
1313
android:text="TextView" />
1414

15-
<Button
16-
android:id="@+id/button1"
17-
android:layout_width="wrap_content"
15+
<ImageView
16+
android:id="@+id/imageView1"
17+
android:layout_width="match_parent"
1818
android:layout_height="wrap_content"
19-
android:layout_below="@+id/textView1"
20-
android:text="Button" />
19+
android:layout_below="@+id/textView1"
20+
android:scaleType="centerCrop"
21+
/>
2122

2223
</RelativeLayout>

src/com/chiemy/cardview/MainActivity.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
import android.view.LayoutInflater;
1010
import android.view.View;
1111
import android.view.ViewGroup;
12+
import android.widget.ImageView;
1213
import android.widget.TextView;
1314
import android.widget.Toast;
1415

15-
import com.chiemy.cardview.view.CardStackAdapter;
16+
import com.chiemy.cardview.view.CardAdapter;
1617
import com.chiemy.cardview.view.CardView;
1718
import com.chiemy.cardview.view.CardView.OnCardClickListener;
1819

@@ -46,22 +47,26 @@ private List<String> initData() {
4647
return list;
4748
}
4849

49-
public class MyCardAdapter extends CardStackAdapter<String>{
50+
public class MyCardAdapter extends CardAdapter<String>{
5051

5152
public MyCardAdapter(Context context) {
5253
super(context);
5354
}
54-
55+
56+
@Override
57+
public int getCount() {
58+
return Integer.MAX_VALUE;
59+
}
60+
5561
@Override
5662
protected View getCardView(int position,
5763
View convertView, ViewGroup parent) {
58-
TextView tv = null;
5964
if(convertView == null) {
6065
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
6166
convertView = inflater.inflate(R.layout.item_layout, parent, false);
6267
}
63-
tv = (TextView) convertView.findViewById(R.id.textView1);
64-
tv.setText(getItem(position).toString());
68+
TextView tv = (TextView) convertView.findViewById(R.id.textView1);
69+
tv.setText(getItem(position%7).toString());
6570
return convertView;
6671
}
6772
}

src/com/chiemy/cardview/view/BaseCardStackAdapter.java renamed to src/com/chiemy/cardview/view/BaseCardAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22

33
import android.widget.BaseAdapter;
44

5-
public abstract class BaseCardStackAdapter extends BaseAdapter {
5+
public abstract class BaseCardAdapter extends BaseAdapter {
66

77
}

src/com/chiemy/cardview/view/CardStackAdapter.java renamed to src/com/chiemy/cardview/view/CardAdapter.java

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,34 @@
1111

1212
import com.chiemy.cardview.R;
1313

14-
public abstract class CardStackAdapter<T> extends BaseCardStackAdapter {
14+
public abstract class CardAdapter<T> extends BaseCardAdapter {
1515
private final Context mContext;
1616

1717
private ArrayList<T> mData;
1818

19-
public CardStackAdapter(Context context) {
19+
public CardAdapter(Context context) {
2020
mContext = context;
2121
mData = new ArrayList<T>();
2222
}
2323

24-
public CardStackAdapter(Context context, Collection<? extends T> items) {
24+
public CardAdapter(Context context, Collection<? extends T> items) {
2525
mContext = context;
2626
mData = new ArrayList<T>(items);
2727
}
2828

2929
@Override
3030
public View getView(int position, View convertView, ViewGroup parent) {
3131
FrameLayout wrapper = (FrameLayout) convertView;
32-
FrameLayout innerWrapper;
3332
View cardView;
3433
View convertedCardView;
3534
if (wrapper == null) {
3635
wrapper = new FrameLayout(mContext);
3736
wrapper.setBackgroundResource(R.drawable.card_bg);
38-
if (shouldFillCardBackground()) {
39-
innerWrapper = new FrameLayout(mContext);
40-
innerWrapper.setBackgroundColor(mContext.getResources().getColor(R.color.card_bg));
41-
wrapper.addView(innerWrapper);
42-
} else {
43-
innerWrapper = wrapper;
44-
}
45-
cardView = getCardView(position, null, parent);
46-
innerWrapper.addView(cardView);
37+
cardView = getCardView(position, null, wrapper);
38+
wrapper.addView(cardView);
4739
} else {
48-
if (shouldFillCardBackground()) {
49-
innerWrapper = (FrameLayout) wrapper.getChildAt(0);
50-
} else {
51-
innerWrapper = wrapper;
52-
}
53-
cardView = innerWrapper.getChildAt(0);
54-
convertedCardView = getCardView(position, cardView, parent);
40+
cardView = wrapper.getChildAt(0);
41+
convertedCardView = getCardView(position, cardView, wrapper);
5542
if (convertedCardView != cardView) {
5643
wrapper.removeView(cardView);
5744
wrapper.addView(convertedCardView);
@@ -62,10 +49,6 @@ public View getView(int position, View convertView, ViewGroup parent) {
6249

6350
protected abstract View getCardView(int position, View convertView, ViewGroup parent);
6451

65-
public boolean shouldFillCardBackground() {
66-
return false;
67-
}
68-
6952
public void addAll(List<T> items){
7053
mData.addAll(items);
7154
}

src/com/chiemy/cardview/view/CardView.java

Lines changed: 48 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,17 @@
1717
import com.nineoldandroids.view.ViewHelper;
1818
import com.nineoldandroids.view.ViewPropertyAnimator;
1919

20+
/**
21+
* @author chiemy
22+
*
23+
*/
2024
public class CardView extends FrameLayout{
2125
private static final int ITEM_SPACE = 40;
22-
private int mMaxVisible = 5; // 最多可见的个数
26+
private static final int DEF_MAX_VISIBLE = 5;
27+
28+
private int mMaxVisible = DEF_MAX_VISIBLE;
29+
private int itemSpace = ITEM_SPACE;
30+
2331
private float mTouchSlop;
2432
private ListAdapter mListAdapter;
2533
private int mNextAdapterPosition;
@@ -64,6 +72,22 @@ private void init() {
6472
mTouchSlop = con.getScaledTouchSlop();
6573
}
6674

75+
public void setMaxVisibleCount(int count) {
76+
mMaxVisible = count;
77+
}
78+
79+
public int getMaxVisibleCount() {
80+
return mMaxVisible;
81+
}
82+
83+
public void setItemSpace(int itemSpace) {
84+
this.itemSpace = itemSpace;
85+
}
86+
87+
public int getItemSpace() {
88+
return itemSpace;
89+
}
90+
6791
public ListAdapter getAdapter() {
6892
return mListAdapter;
6993
}
@@ -79,6 +103,7 @@ public void setAdapter(ListAdapter adapter) {
79103
ensureFull();
80104
}
81105

106+
82107
public void setOnCardClickListener(OnCardClickListener listener) {
83108
mListener = listener;
84109
}
@@ -92,17 +117,27 @@ && getChildCount() < mMaxVisible) {
92117
if(mNextAdapterPosition >= mMaxVisible){
93118
index = mMaxVisible - 1;
94119
}
95-
View view = mListAdapter.getView(mNextAdapterPosition, null, this);
120+
final View view = mListAdapter.getView(mNextAdapterPosition, null, this);
96121
//viewHolder.put(index, view);
97122
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
98123
int topMargin = (mMaxVisible - index - 1)*ITEM_SPACE + 20;
124+
params.setMargins(0, topMargin, 0, 0);
99125
view.setLayoutParams(params);
100126
ViewHelper.setScaleX(view, ((mMaxVisible - index - 1)/(float)mMaxVisible)*0.2f + 0.8f);
101-
ViewHelper.setTranslationY(view, topMargin);
127+
//ViewHelper.setTranslationY(view, topMargin);
102128
ViewHelper.setAlpha(view, mNextAdapterPosition == 0 ? 1 : 0.5f);
103129
addViewInLayout(view,0, params);
104130
requestLayout();
105-
131+
if(mNextAdapterPosition == 0){
132+
view.setOnClickListener(new OnClickListener() {
133+
@Override
134+
public void onClick(View v) {
135+
if(mListener != null){
136+
mListener.onCardClick(view, 0);
137+
}
138+
}
139+
});
140+
}
106141
mNextAdapterPosition += 1;
107142
}
108143
}
@@ -122,7 +157,6 @@ public boolean onTouchEvent(MotionEvent event) {
122157
float distance = currentY - downY;
123158
if(distance > mTouchSlop && !remove){
124159
if(goDown()){
125-
downY = -1;
126160
remove = true;
127161
}
128162
}
@@ -132,7 +166,7 @@ public boolean onTouchEvent(MotionEvent event) {
132166

133167
break;
134168
}
135-
return true;
169+
return super.onTouchEvent(event);
136170
}
137171

138172
/**
@@ -144,13 +178,16 @@ private boolean goDown() {
144178
topRect = new Rect();
145179
topView.getHitRect(topRect);
146180
}
181+
System.out.println(">>>" + topRect.left + "," + topRect.right + ","
182+
+ topRect.top + "," + topRect.bottom);
183+
System.out.println(">>>" + downX + "," + downY);
147184
if(!topRect.contains((int)downX, (int)downY)){
148185
return false;
149186
}
150187
ViewPropertyAnimator anim = ViewPropertyAnimator.animate(topView)
151-
.translationY(topView.getTranslationY() + topView.getHeight()/2)
152-
.setDuration(200)
153-
.alpha(0.3f);
188+
.translationY(topView.getTranslationY() + topView.getHeight())
189+
.alpha(0.3f).scaleX(1)
190+
.setDuration(200);
154191
anim.setListener(new AnimatorListenerAdapter() {
155192
@Override
156193
public void onAnimationEnd(Animator animation) {
@@ -167,7 +204,7 @@ public void onAnimationEnd(Animator animation) {
167204
if((count == mMaxVisible && i != 0) || count < mMaxVisible){
168205
ViewPropertyAnimator.animate(view)
169206
.translationY(tranlateY)
170-
.scaleX(scaleX).setDuration(100);
207+
.scaleX(scaleX).setDuration(200);
171208
}
172209
}
173210
}
@@ -182,7 +219,7 @@ private void bringToTop(final View view) {
182219
ViewPropertyAnimator.animate(view)
183220
.translationY(tranlateY)
184221
.alpha(1).setInterpolator(new AccelerateInterpolator())
185-
.scaleX(scaleX).setDuration(150)
222+
.scaleX(scaleX).setDuration(200)
186223
.setListener(new AnimatorListenerAdapter() {
187224
public void onAnimationEnd(Animator animation) {
188225
topPosition++;

0 commit comments

Comments
 (0)