├── .classpath
├── .project
├── AndroidManifest.xml
├── LICENSE
├── ListViewAnimator.apk
├── README.md
├── bin
├── AndroidManifest.xml
├── ListViewAnimator.apk
├── R.txt
├── classes.dex
├── classes
│ ├── android
│ │ └── support
│ │ │ └── v7
│ │ │ └── appcompat
│ │ │ ├── R$anim.class
│ │ │ ├── R$attr.class
│ │ │ ├── R$bool.class
│ │ │ ├── R$color.class
│ │ │ ├── R$dimen.class
│ │ │ ├── R$drawable.class
│ │ │ ├── R$id.class
│ │ │ ├── R$integer.class
│ │ │ ├── R$layout.class
│ │ │ ├── R$string.class
│ │ │ ├── R$style.class
│ │ │ ├── R$styleable.class
│ │ │ └── R.class
│ └── com
│ │ └── witheyjr
│ │ └── listviewanimator
│ │ ├── BuildConfig.class
│ │ ├── ContentsWrapper.class
│ │ ├── EggsampleActivity$1.class
│ │ ├── EggsampleActivity$2.class
│ │ ├── EggsampleActivity$3.class
│ │ ├── EggsampleActivity$4.class
│ │ ├── EggsampleActivity$5.class
│ │ ├── EggsampleActivity.class
│ │ ├── ListViewAnimator$1.class
│ │ ├── ListViewAnimator$10.class
│ │ ├── ListViewAnimator$11.class
│ │ ├── ListViewAnimator$12.class
│ │ ├── ListViewAnimator$13.class
│ │ ├── ListViewAnimator$2.class
│ │ ├── ListViewAnimator$3.class
│ │ ├── ListViewAnimator$4.class
│ │ ├── ListViewAnimator$5.class
│ │ ├── ListViewAnimator$6.class
│ │ ├── ListViewAnimator$7.class
│ │ ├── ListViewAnimator$8.class
│ │ ├── ListViewAnimator$9.class
│ │ ├── ListViewAnimator$Axis.class
│ │ ├── ListViewAnimator$ListViewAnimatorCallbacks.class
│ │ ├── ListViewAnimator.class
│ │ ├── R$anim.class
│ │ ├── R$attr.class
│ │ ├── R$bool.class
│ │ ├── R$color.class
│ │ ├── R$dimen.class
│ │ ├── R$drawable.class
│ │ ├── R$id.class
│ │ ├── R$integer.class
│ │ ├── R$layout.class
│ │ ├── R$menu.class
│ │ ├── R$string.class
│ │ ├── R$style.class
│ │ ├── R$styleable.class
│ │ ├── R.class
│ │ ├── StableWrapperArrayAdapter$1.class
│ │ ├── StableWrapperArrayAdapter$ImageLoaderTask.class
│ │ ├── StableWrapperArrayAdapter$LoadedDrawable.class
│ │ ├── StableWrapperArrayAdapter.class
│ │ ├── SwipeDismissListViewTouchListener$1.class
│ │ ├── SwipeDismissListViewTouchListener$2.class
│ │ ├── SwipeDismissListViewTouchListener$3.class
│ │ ├── SwipeDismissListViewTouchListener$4.class
│ │ ├── SwipeDismissListViewTouchListener$5.class
│ │ ├── SwipeDismissListViewTouchListener$6.class
│ │ ├── SwipeDismissListViewTouchListener$7.class
│ │ ├── SwipeDismissListViewTouchListener$DismissCallbacks.class
│ │ └── SwipeDismissListViewTouchListener.class
├── dexedLibs
│ ├── android-support-v4-b4c5268c5b956bdd1597c5f0653b82de.jar
│ ├── android-support-v7-appcompat-1a38b72b10fdea95da24f4abd8511b10.jar
│ ├── appcompat_v7-46a22a1d0035bb0e0ee4bdc1bb212b97.jar
│ ├── nineoldandroids-2.4.0-6328dc3faf7867f331d270a0bcccf17f.jar
│ └── swipetodismissundolist-master-c7bdecb1d679afb13e828cf9570f6637.jar
├── jarlist.cache
├── res
│ └── crunch
│ │ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-xhdpi
│ │ ├── add.png
│ │ ├── card2.9.png
│ │ ├── card6.9.png
│ │ ├── ic_action_undo.png
│ │ ├── ic_launcher.png
│ │ └── list.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ │ └── drawable
│ │ ├── bad_egg.png
│ │ ├── baked_egg.png
│ │ ├── basted_egg.png
│ │ ├── caviar.png
│ │ ├── chicken_egg.png
│ │ ├── coddled_egg.png
│ │ ├── duck_egg.png
│ │ ├── eggcellent.png
│ │ ├── eggs_benedict.png
│ │ ├── eggstraterrestrial.png
│ │ ├── eggstravagant.png
│ │ ├── emu_egg.png
│ │ ├── fried_egg.png
│ │ ├── good_egg.png
│ │ ├── goose_egg.png
│ │ ├── hard_boiled_egg.png
│ │ ├── large_egg.png
│ │ ├── medium_egg.png
│ │ ├── omelette.png
│ │ ├── ostrich_egg.png
│ │ ├── pheasant_egg.png
│ │ ├── pickled_egg.png
│ │ ├── poached_egg.png
│ │ ├── quail_egg.png
│ │ ├── scotch_egg.png
│ │ ├── scrambled_egg.png
│ │ ├── shirred_egg.png
│ │ ├── small_egg.png
│ │ ├── soft_boiled_egg.png
│ │ └── tea_egg.png
└── resources.ap_
├── gen
├── android
│ └── support
│ │ └── v7
│ │ └── appcompat
│ │ └── R.java
└── com
│ └── witheyjr
│ └── listviewanimator
│ ├── BuildConfig.java
│ └── R.java
├── ic_launcher-web.png
├── libs
├── android-support-v4.jar
└── nineoldandroids-2.4.0.jar
├── proguard-project.txt
├── project.properties
├── res
├── anim
│ ├── popup_hide.xml
│ └── popup_show.xml
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ ├── add.png
│ ├── card2.9.png
│ ├── card6.9.png
│ ├── ic_action_undo.png
│ └── ic_launcher.png
├── drawable-xxhdpi
│ └── ic_launcher.png
├── drawable
│ ├── bad_egg.png
│ ├── baked_egg.png
│ ├── basted_egg.png
│ ├── caviar.png
│ ├── chicken_egg.png
│ ├── coddled_egg.png
│ ├── duck_egg.png
│ ├── eggcellent.png
│ ├── eggs_benedict.png
│ ├── eggstraterrestrial.png
│ ├── eggstravagant.png
│ ├── emu_egg.png
│ ├── fried_egg.png
│ ├── good_egg.png
│ ├── goose_egg.png
│ ├── hard_boiled_egg.png
│ ├── large_egg.png
│ ├── medium_egg.png
│ ├── omelette.png
│ ├── ostrich_egg.png
│ ├── pheasant_egg.png
│ ├── pickled_egg.png
│ ├── poached_egg.png
│ ├── popup_bg.xml
│ ├── quail_egg.png
│ ├── scotch_egg.png
│ ├── scrambled_egg.png
│ ├── shirred_egg.png
│ ├── small_egg.png
│ ├── soft_boiled_egg.png
│ ├── tea_egg.png
│ ├── undo_btn_bg.xml
│ ├── undo_btn_bg_focused.xml
│ └── undo_btn_bg_pressed.xml
├── layout
│ ├── activity_main.xml
│ ├── eggsample_image_item.xml
│ ├── eggsample_item.xml
│ ├── fragment_main.xml
│ └── undo_popup.xml
├── menu
│ └── main.xml
├── values-v11
│ └── styles.xml
├── values-v14
│ └── styles.xml
├── values-w820dp
│ └── dimens.xml
└── values
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
├── screenshot.png
└── src
└── com
└── witheyjr
└── listviewanimator
├── ContentsWrapper.java
├── EggsampleActivity.java
├── ListViewAnimator.java
├── ListViewAnimator_26_5_14.java
├── ListViewAnimator_before_clean.java
├── MainActivity.java
├── OldSwipeDismissListViewTouchListener.java
├── StableArrayAdapter.java
├── StableWrapperArrayAdapter.java
└── SwipeDismissListViewTouchListener.java
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 |
2 |
3 | ListViewAnimator
4 |
5 |
6 |
7 |
8 |
9 | com.android.ide.eclipse.adt.ResourceManagerBuilder
10 |
11 |
12 |
13 |
14 | com.android.ide.eclipse.adt.PreCompilerBuilder
15 |
16 |
17 |
18 |
19 | org.eclipse.jdt.core.javabuilder
20 |
21 |
22 |
23 |
24 | com.android.ide.eclipse.adt.ApkBuilder
25 |
26 |
27 |
28 |
29 |
30 | com.android.ide.eclipse.adt.AndroidNature
31 | org.eclipse.jdt.core.javanature
32 |
33 |
34 |
--------------------------------------------------------------------------------
/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
13 |
14 |
19 |
20 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
--------------------------------------------------------------------------------
/ListViewAnimator.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/ListViewAnimator.apk
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ListViewAnimator
2 | ================
3 |
4 | Allows very smoothly animated and versatile addition and removal of ListView items [mostly] regardless of layout complexity, unlike traditional SwipeDismiss implementations.
5 |
6 | Works on Android 2.2 and up.
7 |
8 | ##Description
9 |
10 | This code builds on AOSP code in order to animate both the removal and addition of ListView items smoothly and easily. Only implementing the ListViewAnimator interface and small tweaks to your adapter class are necessary in order to give your ListView smooth animations, regardless of layout complexity. This code was created because in my [News Alarm][news alarm] app, the traditional methods of resizing the views after swiping (via layoutParams) was jerky and unattractive on many devices. The [DevBytes][devbytes] AOSP code showed us how to make the removal animations very smooth, but did not take into account the addition of items.
11 |
12 | - Uses an adapted form of SwipeToDismiss (Thanks [Roman Nurik][roman-swipe-to-dismiss])
13 | - Utilises the fantastic NineOldAndroids (Thanks [Jake Wharton][nineoldandroids])
14 | - Also includes content from SwipeToDismissUndoList (Thanks [Tim Roes][timroes])
15 |
16 | ####[Sample apk][apk]
17 |
18 |
19 |
20 |
21 | ![screenshot][screenshot]
22 |
23 |
24 |
25 |
26 |
27 | ##Usage
28 |
29 | Please download and see the sample app code for usage instructions and example.
30 |
31 | ##License
32 |
33 | Copyright (c) 2014 J Withey
34 |
35 | Licensed under the Apache License, Version 2.0 (the "License");
36 | you may not use this file except in compliance with the License.
37 | You may obtain a copy of the License at
38 |
39 | http://www.apache.org/licenses/LICENSE-2.0
40 |
41 | Unless required by applicable law or agreed to in writing, software
42 | distributed under the License is distributed on an "AS IS" BASIS,
43 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
44 | See the License for the specific language governing permissions and
45 | limitations under the License.
46 | Come on, don't tell me you read that.
47 |
48 | [screenshot]:https://raw.githubusercontent.com/chief-worminger/ListViewAnimator/master/screenshot.png
49 | [apk]:https://github.com/chief-worminger/ListViewAnimator/blob/master/ListViewAnimator.apk
50 | [roman-swipe-to-dismiss]:https://github.com/romannurik/Android-SwipeToDismiss
51 | [news alarm]:https://play.google.com/store/apps/details?id=com.witheyjr.newsAlarm
52 | [devbytes]:http://graphics-geek.blogspot.co.uk/2013/06/devbytes-animating-listview-deletion.html
53 | [nineoldandroids]:http://nineoldandroids.com/
54 | [timroes]:https://github.com/timroes/SwipeToDismissUndoList
55 |
--------------------------------------------------------------------------------
/bin/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
13 |
14 |
19 |
20 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/bin/ListViewAnimator.apk:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/ListViewAnimator.apk
--------------------------------------------------------------------------------
/bin/R.txt:
--------------------------------------------------------------------------------
1 | int anim abc_fade_in 0x7f040000
2 | int anim abc_fade_out 0x7f040001
3 | int anim abc_slide_in_bottom 0x7f040002
4 | int anim abc_slide_in_top 0x7f040003
5 | int anim abc_slide_out_bottom 0x7f040004
6 | int anim abc_slide_out_top 0x7f040005
7 | int anim popup_hide 0x7f040006
8 | int anim popup_show 0x7f040007
9 | int attr actionBarDivider 0x7f01000b
10 | int attr actionBarItemBackground 0x7f01000c
11 | int attr actionBarSize 0x7f01000a
12 | int attr actionBarSplitStyle 0x7f010008
13 | int attr actionBarStyle 0x7f010007
14 | int attr actionBarTabBarStyle 0x7f010004
15 | int attr actionBarTabStyle 0x7f010003
16 | int attr actionBarTabTextStyle 0x7f010005
17 | int attr actionBarWidgetTheme 0x7f010009
18 | int attr actionButtonStyle 0x7f010012
19 | int attr actionDropDownStyle 0x7f010043
20 | int attr actionLayout 0x7f01004a
21 | int attr actionMenuTextAppearance 0x7f01000d
22 | int attr actionMenuTextColor 0x7f01000e
23 | int attr actionModeBackground 0x7f010038
24 | int attr actionModeCloseButtonStyle 0x7f010037
25 | int attr actionModeCloseDrawable 0x7f01003a
26 | int attr actionModeCopyDrawable 0x7f01003c
27 | int attr actionModeCutDrawable 0x7f01003b
28 | int attr actionModeFindDrawable 0x7f010040
29 | int attr actionModePasteDrawable 0x7f01003d
30 | int attr actionModePopupWindowStyle 0x7f010042
31 | int attr actionModeSelectAllDrawable 0x7f01003e
32 | int attr actionModeShareDrawable 0x7f01003f
33 | int attr actionModeSplitBackground 0x7f010039
34 | int attr actionModeStyle 0x7f010036
35 | int attr actionModeWebSearchDrawable 0x7f010041
36 | int attr actionOverflowButtonStyle 0x7f010006
37 | int attr actionProviderClass 0x7f01004c
38 | int attr actionViewClass 0x7f01004b
39 | int attr activityChooserViewStyle 0x7f010068
40 | int attr background 0x7f01002b
41 | int attr backgroundSplit 0x7f01002d
42 | int attr backgroundStacked 0x7f01002c
43 | int attr buttonBarButtonStyle 0x7f010014
44 | int attr buttonBarStyle 0x7f010013
45 | int attr customNavigationLayout 0x7f01002e
46 | int attr disableChildrenWhenDisabled 0x7f010050
47 | int attr displayOptions 0x7f010024
48 | int attr divider 0x7f01002a
49 | int attr dividerHorizontal 0x7f010017
50 | int attr dividerPadding 0x7f010052
51 | int attr dividerVertical 0x7f010016
52 | int attr dropDownListViewStyle 0x7f01001d
53 | int attr dropdownListPreferredItemHeight 0x7f010044
54 | int attr expandActivityOverflowButtonDrawable 0x7f010067
55 | int attr height 0x7f010022
56 | int attr homeAsUpIndicator 0x7f01000f
57 | int attr homeLayout 0x7f01002f
58 | int attr icon 0x7f010028
59 | int attr iconifiedByDefault 0x7f010056
60 | int attr indeterminateProgressStyle 0x7f010031
61 | int attr initialActivityCount 0x7f010066
62 | int attr isLightTheme 0x7f010055
63 | int attr itemPadding 0x7f010033
64 | int attr listChoiceBackgroundIndicator 0x7f010048
65 | int attr listPopupWindowStyle 0x7f01001e
66 | int attr listPreferredItemHeight 0x7f010018
67 | int attr listPreferredItemHeightLarge 0x7f01001a
68 | int attr listPreferredItemHeightSmall 0x7f010019
69 | int attr listPreferredItemPaddingLeft 0x7f01001b
70 | int attr listPreferredItemPaddingRight 0x7f01001c
71 | int attr logo 0x7f010029
72 | int attr navigationMode 0x7f010023
73 | int attr paddingEnd 0x7f010035
74 | int attr paddingStart 0x7f010034
75 | int attr panelMenuListTheme 0x7f010047
76 | int attr panelMenuListWidth 0x7f010046
77 | int attr popupMenuStyle 0x7f010045
78 | int attr popupPromptView 0x7f01004f
79 | int attr progressBarPadding 0x7f010032
80 | int attr progressBarStyle 0x7f010030
81 | int attr prompt 0x7f01004d
82 | int attr queryHint 0x7f010057
83 | int attr searchDropdownBackground 0x7f010058
84 | int attr searchResultListItemHeight 0x7f010061
85 | int attr searchViewAutoCompleteTextView 0x7f010065
86 | int attr searchViewCloseIcon 0x7f010059
87 | int attr searchViewEditQuery 0x7f01005d
88 | int attr searchViewEditQueryBackground 0x7f01005e
89 | int attr searchViewGoIcon 0x7f01005a
90 | int attr searchViewSearchIcon 0x7f01005b
91 | int attr searchViewTextField 0x7f01005f
92 | int attr searchViewTextFieldRight 0x7f010060
93 | int attr searchViewVoiceIcon 0x7f01005c
94 | int attr selectableItemBackground 0x7f010015
95 | int attr showAsAction 0x7f010049
96 | int attr showDividers 0x7f010051
97 | int attr spinnerDropDownItemStyle 0x7f010054
98 | int attr spinnerMode 0x7f01004e
99 | int attr spinnerStyle 0x7f010053
100 | int attr subtitle 0x7f010025
101 | int attr subtitleTextStyle 0x7f010027
102 | int attr textAllCaps 0x7f010069
103 | int attr textAppearanceLargePopupMenu 0x7f010010
104 | int attr textAppearanceListItem 0x7f01001f
105 | int attr textAppearanceListItemSmall 0x7f010020
106 | int attr textAppearanceSearchResultSubtitle 0x7f010063
107 | int attr textAppearanceSearchResultTitle 0x7f010062
108 | int attr textAppearanceSmallPopupMenu 0x7f010011
109 | int attr textColorSearchUrl 0x7f010064
110 | int attr title 0x7f010021
111 | int attr titleTextStyle 0x7f010026
112 | int attr windowActionBar 0x7f010000
113 | int attr windowActionBarOverlay 0x7f010001
114 | int attr windowSplitActionBar 0x7f010002
115 | int bool abc_action_bar_embed_tabs_pre_jb 0x7f060000
116 | int bool abc_action_bar_expanded_action_views_exclusive 0x7f060001
117 | int bool abc_config_actionMenuItemAllCaps 0x7f060005
118 | int bool abc_config_allowActionMenuItemTextWithIcon 0x7f060004
119 | int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x7f060003
120 | int bool abc_split_action_bar_is_narrow 0x7f060002
121 | int color abc_search_url_text_holo 0x7f070009
122 | int color abc_search_url_text_normal 0x7f070000
123 | int color abc_search_url_text_pressed 0x7f070002
124 | int color abc_search_url_text_selected 0x7f070001
125 | int color btn_focused 0x7f070004
126 | int color btn_normal 0x7f070005
127 | int color btn_pressed 0x7f070003
128 | int color popup_bg_color 0x7f070006
129 | int color popup_text_color 0x7f070008
130 | int color separator_color 0x7f070007
131 | int dimen abc_action_bar_default_height 0x7f080002
132 | int dimen abc_action_bar_icon_vertical_padding 0x7f080003
133 | int dimen abc_action_bar_progress_bar_size 0x7f08000a
134 | int dimen abc_action_bar_stacked_max_height 0x7f080009
135 | int dimen abc_action_bar_stacked_tab_max_width 0x7f080001
136 | int dimen abc_action_bar_subtitle_bottom_margin 0x7f080007
137 | int dimen abc_action_bar_subtitle_text_size 0x7f080005
138 | int dimen abc_action_bar_subtitle_top_margin 0x7f080006
139 | int dimen abc_action_bar_title_text_size 0x7f080004
140 | int dimen abc_action_button_min_width 0x7f080008
141 | int dimen abc_config_prefDialogWidth 0x7f080000
142 | int dimen abc_dropdownitem_icon_width 0x7f080010
143 | int dimen abc_dropdownitem_text_padding_left 0x7f08000e
144 | int dimen abc_dropdownitem_text_padding_right 0x7f08000f
145 | int dimen abc_panel_menu_list_width 0x7f08000b
146 | int dimen abc_search_view_preferred_width 0x7f08000d
147 | int dimen abc_search_view_text_min_width 0x7f08000c
148 | int dimen activity_horizontal_margin 0x7f080011
149 | int dimen activity_vertical_margin 0x7f080012
150 | int drawable abc_ab_bottom_solid_dark_holo 0x7f020000
151 | int drawable abc_ab_bottom_solid_light_holo 0x7f020001
152 | int drawable abc_ab_bottom_transparent_dark_holo 0x7f020002
153 | int drawable abc_ab_bottom_transparent_light_holo 0x7f020003
154 | int drawable abc_ab_share_pack_holo_dark 0x7f020004
155 | int drawable abc_ab_share_pack_holo_light 0x7f020005
156 | int drawable abc_ab_solid_dark_holo 0x7f020006
157 | int drawable abc_ab_solid_light_holo 0x7f020007
158 | int drawable abc_ab_stacked_solid_dark_holo 0x7f020008
159 | int drawable abc_ab_stacked_solid_light_holo 0x7f020009
160 | int drawable abc_ab_stacked_transparent_dark_holo 0x7f02000a
161 | int drawable abc_ab_stacked_transparent_light_holo 0x7f02000b
162 | int drawable abc_ab_transparent_dark_holo 0x7f02000c
163 | int drawable abc_ab_transparent_light_holo 0x7f02000d
164 | int drawable abc_cab_background_bottom_holo_dark 0x7f02000e
165 | int drawable abc_cab_background_bottom_holo_light 0x7f02000f
166 | int drawable abc_cab_background_top_holo_dark 0x7f020010
167 | int drawable abc_cab_background_top_holo_light 0x7f020011
168 | int drawable abc_ic_ab_back_holo_dark 0x7f020012
169 | int drawable abc_ic_ab_back_holo_light 0x7f020013
170 | int drawable abc_ic_cab_done_holo_dark 0x7f020014
171 | int drawable abc_ic_cab_done_holo_light 0x7f020015
172 | int drawable abc_ic_clear 0x7f020016
173 | int drawable abc_ic_clear_disabled 0x7f020017
174 | int drawable abc_ic_clear_holo_light 0x7f020018
175 | int drawable abc_ic_clear_normal 0x7f020019
176 | int drawable abc_ic_clear_search_api_disabled_holo_light 0x7f02001a
177 | int drawable abc_ic_clear_search_api_holo_light 0x7f02001b
178 | int drawable abc_ic_commit_search_api_holo_dark 0x7f02001c
179 | int drawable abc_ic_commit_search_api_holo_light 0x7f02001d
180 | int drawable abc_ic_go 0x7f02001e
181 | int drawable abc_ic_go_search_api_holo_light 0x7f02001f
182 | int drawable abc_ic_menu_moreoverflow_normal_holo_dark 0x7f020020
183 | int drawable abc_ic_menu_moreoverflow_normal_holo_light 0x7f020021
184 | int drawable abc_ic_menu_share_holo_dark 0x7f020022
185 | int drawable abc_ic_menu_share_holo_light 0x7f020023
186 | int drawable abc_ic_search 0x7f020024
187 | int drawable abc_ic_search_api_holo_light 0x7f020025
188 | int drawable abc_ic_voice_search 0x7f020026
189 | int drawable abc_ic_voice_search_api_holo_light 0x7f020027
190 | int drawable abc_item_background_holo_dark 0x7f020028
191 | int drawable abc_item_background_holo_light 0x7f020029
192 | int drawable abc_list_divider_holo_dark 0x7f02002a
193 | int drawable abc_list_divider_holo_light 0x7f02002b
194 | int drawable abc_list_focused_holo 0x7f02002c
195 | int drawable abc_list_longpressed_holo 0x7f02002d
196 | int drawable abc_list_pressed_holo_dark 0x7f02002e
197 | int drawable abc_list_pressed_holo_light 0x7f02002f
198 | int drawable abc_list_selector_background_transition_holo_dark 0x7f020030
199 | int drawable abc_list_selector_background_transition_holo_light 0x7f020031
200 | int drawable abc_list_selector_disabled_holo_dark 0x7f020032
201 | int drawable abc_list_selector_disabled_holo_light 0x7f020033
202 | int drawable abc_list_selector_holo_dark 0x7f020034
203 | int drawable abc_list_selector_holo_light 0x7f020035
204 | int drawable abc_menu_dropdown_panel_holo_dark 0x7f020036
205 | int drawable abc_menu_dropdown_panel_holo_light 0x7f020037
206 | int drawable abc_menu_hardkey_panel_holo_dark 0x7f020038
207 | int drawable abc_menu_hardkey_panel_holo_light 0x7f020039
208 | int drawable abc_search_dropdown_dark 0x7f02003a
209 | int drawable abc_search_dropdown_light 0x7f02003b
210 | int drawable abc_spinner_ab_default_holo_dark 0x7f02003c
211 | int drawable abc_spinner_ab_default_holo_light 0x7f02003d
212 | int drawable abc_spinner_ab_disabled_holo_dark 0x7f02003e
213 | int drawable abc_spinner_ab_disabled_holo_light 0x7f02003f
214 | int drawable abc_spinner_ab_focused_holo_dark 0x7f020040
215 | int drawable abc_spinner_ab_focused_holo_light 0x7f020041
216 | int drawable abc_spinner_ab_holo_dark 0x7f020042
217 | int drawable abc_spinner_ab_holo_light 0x7f020043
218 | int drawable abc_spinner_ab_pressed_holo_dark 0x7f020044
219 | int drawable abc_spinner_ab_pressed_holo_light 0x7f020045
220 | int drawable abc_tab_indicator_ab_holo 0x7f020046
221 | int drawable abc_tab_selected_focused_holo 0x7f020047
222 | int drawable abc_tab_selected_holo 0x7f020048
223 | int drawable abc_tab_selected_pressed_holo 0x7f020049
224 | int drawable abc_tab_unselected_pressed_holo 0x7f02004a
225 | int drawable abc_textfield_search_default_holo_dark 0x7f02004b
226 | int drawable abc_textfield_search_default_holo_light 0x7f02004c
227 | int drawable abc_textfield_search_right_default_holo_dark 0x7f02004d
228 | int drawable abc_textfield_search_right_default_holo_light 0x7f02004e
229 | int drawable abc_textfield_search_right_selected_holo_dark 0x7f02004f
230 | int drawable abc_textfield_search_right_selected_holo_light 0x7f020050
231 | int drawable abc_textfield_search_selected_holo_dark 0x7f020051
232 | int drawable abc_textfield_search_selected_holo_light 0x7f020052
233 | int drawable abc_textfield_searchview_holo_dark 0x7f020053
234 | int drawable abc_textfield_searchview_holo_light 0x7f020054
235 | int drawable abc_textfield_searchview_right_holo_dark 0x7f020055
236 | int drawable abc_textfield_searchview_right_holo_light 0x7f020056
237 | int drawable add 0x7f020057
238 | int drawable bad_egg 0x7f020058
239 | int drawable baked_egg 0x7f020059
240 | int drawable basted_egg 0x7f02005a
241 | int drawable card2 0x7f02005b
242 | int drawable card6 0x7f02005c
243 | int drawable caviar 0x7f02005d
244 | int drawable chicken_egg 0x7f02005e
245 | int drawable coddled_egg 0x7f02005f
246 | int drawable duck_egg 0x7f020060
247 | int drawable eggcellent 0x7f020061
248 | int drawable eggs_benedict 0x7f020062
249 | int drawable eggstraterrestrial 0x7f020063
250 | int drawable eggstravagant 0x7f020064
251 | int drawable emu_egg 0x7f020065
252 | int drawable fried_egg 0x7f020066
253 | int drawable good_egg 0x7f020067
254 | int drawable goose_egg 0x7f020068
255 | int drawable hard_boiled_egg 0x7f020069
256 | int drawable ic_action_undo 0x7f02006a
257 | int drawable ic_launcher 0x7f02006b
258 | int drawable large_egg 0x7f02006c
259 | int drawable medium_egg 0x7f02006d
260 | int drawable omelette 0x7f02006e
261 | int drawable ostrich_egg 0x7f02006f
262 | int drawable pheasant_egg 0x7f020070
263 | int drawable pickled_egg 0x7f020071
264 | int drawable poached_egg 0x7f020072
265 | int drawable popup_bg 0x7f020073
266 | int drawable quail_egg 0x7f020074
267 | int drawable scotch_egg 0x7f020075
268 | int drawable scrambled_egg 0x7f020076
269 | int drawable shirred_egg 0x7f020077
270 | int drawable small_egg 0x7f020078
271 | int drawable soft_boiled_egg 0x7f020079
272 | int drawable tea_egg 0x7f02007a
273 | int drawable undo_btn_bg 0x7f02007b
274 | int drawable undo_btn_bg_focused 0x7f02007c
275 | int drawable undo_btn_bg_pressed 0x7f02007d
276 | int id action_bar 0x7f05001c
277 | int id action_bar_activity_content 0x7f050015
278 | int id action_bar_container 0x7f05001b
279 | int id action_bar_overlay_layout 0x7f05001f
280 | int id action_bar_root 0x7f05001a
281 | int id action_bar_subtitle 0x7f050023
282 | int id action_bar_title 0x7f050022
283 | int id action_context_bar 0x7f05001d
284 | int id action_menu_divider 0x7f050016
285 | int id action_menu_presenter 0x7f050017
286 | int id action_mode_close_button 0x7f050024
287 | int id activity_chooser_view_content 0x7f050025
288 | int id add 0x7f050040
289 | int id always 0x7f05000b
290 | int id beginning 0x7f050011
291 | int id checkbox 0x7f05002d
292 | int id collapseActionView 0x7f05000d
293 | int id container 0x7f05003c
294 | int id default_activity_button 0x7f050028
295 | int id dialog 0x7f05000e
296 | int id disableHome 0x7f050008
297 | int id dropdown 0x7f05000f
298 | int id edit_query 0x7f050030
299 | int id end 0x7f050013
300 | int id expand_activities_button 0x7f050026
301 | int id expanded_menu 0x7f05002c
302 | int id home 0x7f050014
303 | int id homeAsUp 0x7f050005
304 | int id icon 0x7f05002a
305 | int id ifRoom 0x7f05000a
306 | int id image 0x7f050027
307 | int id list 0x7f05003d
308 | int id listMode 0x7f050001
309 | int id list_item 0x7f050029
310 | int id middle 0x7f050012
311 | int id never 0x7f050009
312 | int id none 0x7f050010
313 | int id normal 0x7f050000
314 | int id progress_circular 0x7f050018
315 | int id progress_horizontal 0x7f050019
316 | int id radio 0x7f05002f
317 | int id search_badge 0x7f050032
318 | int id search_bar 0x7f050031
319 | int id search_button 0x7f050033
320 | int id search_close_btn 0x7f050038
321 | int id search_edit_frame 0x7f050034
322 | int id search_go_btn 0x7f05003a
323 | int id search_mag_icon 0x7f050035
324 | int id search_plate 0x7f050036
325 | int id search_src_text 0x7f050037
326 | int id search_voice_btn 0x7f05003b
327 | int id shortcut 0x7f05002e
328 | int id showCustom 0x7f050007
329 | int id showHome 0x7f050004
330 | int id showTitle 0x7f050006
331 | int id split_action_bar 0x7f05001e
332 | int id submit_area 0x7f050039
333 | int id tabMode 0x7f050002
334 | int id text 0x7f05003e
335 | int id title 0x7f05002b
336 | int id top_action_bar 0x7f050020
337 | int id undo 0x7f05003f
338 | int id up 0x7f050021
339 | int id useLogo 0x7f050003
340 | int id withText 0x7f05000c
341 | int integer abc_max_action_buttons 0x7f090000
342 | int layout abc_action_bar_decor 0x7f030000
343 | int layout abc_action_bar_decor_include 0x7f030001
344 | int layout abc_action_bar_decor_overlay 0x7f030002
345 | int layout abc_action_bar_home 0x7f030003
346 | int layout abc_action_bar_tab 0x7f030004
347 | int layout abc_action_bar_tabbar 0x7f030005
348 | int layout abc_action_bar_title_item 0x7f030006
349 | int layout abc_action_bar_view_list_nav_layout 0x7f030007
350 | int layout abc_action_menu_item_layout 0x7f030008
351 | int layout abc_action_menu_layout 0x7f030009
352 | int layout abc_action_mode_bar 0x7f03000a
353 | int layout abc_action_mode_close_item 0x7f03000b
354 | int layout abc_activity_chooser_view 0x7f03000c
355 | int layout abc_activity_chooser_view_include 0x7f03000d
356 | int layout abc_activity_chooser_view_list_item 0x7f03000e
357 | int layout abc_expanded_menu_layout 0x7f03000f
358 | int layout abc_list_menu_item_checkbox 0x7f030010
359 | int layout abc_list_menu_item_icon 0x7f030011
360 | int layout abc_list_menu_item_layout 0x7f030012
361 | int layout abc_list_menu_item_radio 0x7f030013
362 | int layout abc_popup_menu_item_layout 0x7f030014
363 | int layout abc_search_dropdown_item_icons_2line 0x7f030015
364 | int layout abc_search_view 0x7f030016
365 | int layout activity_main 0x7f030017
366 | int layout eggsample_image_item 0x7f030018
367 | int layout eggsample_item 0x7f030019
368 | int layout fragment_main 0x7f03001a
369 | int layout support_simple_spinner_dropdown_item 0x7f03001b
370 | int layout undo_popup 0x7f03001c
371 | int menu main 0x7f0c0000
372 | int string abc_action_bar_home_description 0x7f0a0001
373 | int string abc_action_bar_up_description 0x7f0a0002
374 | int string abc_action_menu_overflow_description 0x7f0a0003
375 | int string abc_action_mode_done 0x7f0a0000
376 | int string abc_activity_chooser_view_see_all 0x7f0a000a
377 | int string abc_activitychooserview_choose_application 0x7f0a0009
378 | int string abc_searchview_description_clear 0x7f0a0006
379 | int string abc_searchview_description_query 0x7f0a0005
380 | int string abc_searchview_description_search 0x7f0a0004
381 | int string abc_searchview_description_submit 0x7f0a0007
382 | int string abc_searchview_description_voice 0x7f0a0008
383 | int string abc_shareactionprovider_share_with 0x7f0a000c
384 | int string abc_shareactionprovider_share_with_application 0x7f0a000b
385 | int string action_settings 0x7f0a0010
386 | int string app_name 0x7f0a000d
387 | int string hello_world 0x7f0a000f
388 | int string image_activity 0x7f0a000e
389 | int string undo 0x7f0a0011
390 | int style AppBaseTheme 0x7f0b0083
391 | int style AppTheme 0x7f0b0084
392 | int style TextAppearance_AppCompat_Base_CompactMenu_Dialog 0x7f0b0063
393 | int style TextAppearance_AppCompat_Base_SearchResult 0x7f0b006d
394 | int style TextAppearance_AppCompat_Base_SearchResult_Subtitle 0x7f0b006f
395 | int style TextAppearance_AppCompat_Base_SearchResult_Title 0x7f0b006e
396 | int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Large 0x7f0b0069
397 | int style TextAppearance_AppCompat_Base_Widget_PopupMenu_Small 0x7f0b006a
398 | int style TextAppearance_AppCompat_Light_Base_SearchResult 0x7f0b0070
399 | int style TextAppearance_AppCompat_Light_Base_SearchResult_Subtitle 0x7f0b0072
400 | int style TextAppearance_AppCompat_Light_Base_SearchResult_Title 0x7f0b0071
401 | int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Large 0x7f0b006b
402 | int style TextAppearance_AppCompat_Light_Base_Widget_PopupMenu_Small 0x7f0b006c
403 | int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f0b0035
404 | int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f0b0034
405 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f0b0030
406 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f0b0031
407 | int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f0b0033
408 | int style TextAppearance_AppCompat_SearchResult_Title 0x7f0b0032
409 | int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f0b001a
410 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f0b0006
411 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f0b0008
412 | int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f0b0005
413 | int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f0b0007
414 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f0b001e
415 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f0b0020
416 | int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f0b001d
417 | int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f0b001f
418 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Menu 0x7f0b0054
419 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle 0x7f0b0056
420 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Subtitle_Inverse 0x7f0b0058
421 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title 0x7f0b0055
422 | int style TextAppearance_AppCompat_Widget_Base_ActionBar_Title_Inverse 0x7f0b0057
423 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle 0x7f0b0051
424 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Subtitle_Inverse 0x7f0b0053
425 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title 0x7f0b0050
426 | int style TextAppearance_AppCompat_Widget_Base_ActionMode_Title_Inverse 0x7f0b0052
427 | int style TextAppearance_AppCompat_Widget_Base_DropDownItem 0x7f0b0061
428 | int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f0b0021
429 | int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f0b002e
430 | int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f0b002f
431 | int style TextAppearance_Widget_AppCompat_Base_ExpandedMenu_Item 0x7f0b0062
432 | int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f0b0028
433 | int style Theme_AppCompat 0x7f0b0077
434 | int style Theme_AppCompat_Base_CompactMenu 0x7f0b0081
435 | int style Theme_AppCompat_Base_CompactMenu_Dialog 0x7f0b0082
436 | int style Theme_AppCompat_CompactMenu 0x7f0b007a
437 | int style Theme_AppCompat_CompactMenu_Dialog 0x7f0b007b
438 | int style Theme_AppCompat_Light 0x7f0b0078
439 | int style Theme_AppCompat_Light_DarkActionBar 0x7f0b0079
440 | int style Theme_Base 0x7f0b007c
441 | int style Theme_Base_AppCompat 0x7f0b007e
442 | int style Theme_Base_AppCompat_Light 0x7f0b007f
443 | int style Theme_Base_AppCompat_Light_DarkActionBar 0x7f0b0080
444 | int style Theme_Base_Light 0x7f0b007d
445 | int style Widget_AppCompat_ActionBar 0x7f0b0000
446 | int style Widget_AppCompat_ActionBar_Solid 0x7f0b0002
447 | int style Widget_AppCompat_ActionBar_TabBar 0x7f0b0011
448 | int style Widget_AppCompat_ActionBar_TabText 0x7f0b0017
449 | int style Widget_AppCompat_ActionBar_TabView 0x7f0b0014
450 | int style Widget_AppCompat_ActionButton 0x7f0b000b
451 | int style Widget_AppCompat_ActionButton_CloseMode 0x7f0b000d
452 | int style Widget_AppCompat_ActionButton_Overflow 0x7f0b000f
453 | int style Widget_AppCompat_ActionMode 0x7f0b001b
454 | int style Widget_AppCompat_ActivityChooserView 0x7f0b0038
455 | int style Widget_AppCompat_AutoCompleteTextView 0x7f0b0036
456 | int style Widget_AppCompat_Base_ActionBar 0x7f0b003a
457 | int style Widget_AppCompat_Base_ActionBar_Solid 0x7f0b003c
458 | int style Widget_AppCompat_Base_ActionBar_TabBar 0x7f0b0045
459 | int style Widget_AppCompat_Base_ActionBar_TabText 0x7f0b004b
460 | int style Widget_AppCompat_Base_ActionBar_TabView 0x7f0b0048
461 | int style Widget_AppCompat_Base_ActionButton 0x7f0b003f
462 | int style Widget_AppCompat_Base_ActionButton_CloseMode 0x7f0b0041
463 | int style Widget_AppCompat_Base_ActionButton_Overflow 0x7f0b0043
464 | int style Widget_AppCompat_Base_ActionMode 0x7f0b004e
465 | int style Widget_AppCompat_Base_ActivityChooserView 0x7f0b0075
466 | int style Widget_AppCompat_Base_AutoCompleteTextView 0x7f0b0073
467 | int style Widget_AppCompat_Base_DropDownItem_Spinner 0x7f0b005d
468 | int style Widget_AppCompat_Base_ListPopupWindow 0x7f0b0065
469 | int style Widget_AppCompat_Base_ListView_DropDown 0x7f0b005f
470 | int style Widget_AppCompat_Base_ListView_Menu 0x7f0b0064
471 | int style Widget_AppCompat_Base_PopupMenu 0x7f0b0067
472 | int style Widget_AppCompat_Base_ProgressBar 0x7f0b005a
473 | int style Widget_AppCompat_Base_ProgressBar_Horizontal 0x7f0b0059
474 | int style Widget_AppCompat_Base_Spinner 0x7f0b005b
475 | int style Widget_AppCompat_DropDownItem_Spinner 0x7f0b0024
476 | int style Widget_AppCompat_Light_ActionBar 0x7f0b0001
477 | int style Widget_AppCompat_Light_ActionBar_Solid 0x7f0b0003
478 | int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f0b0004
479 | int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f0b0012
480 | int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f0b0013
481 | int style Widget_AppCompat_Light_ActionBar_TabText 0x7f0b0018
482 | int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f0b0019
483 | int style Widget_AppCompat_Light_ActionBar_TabView 0x7f0b0015
484 | int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f0b0016
485 | int style Widget_AppCompat_Light_ActionButton 0x7f0b000c
486 | int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f0b000e
487 | int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f0b0010
488 | int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f0b001c
489 | int style Widget_AppCompat_Light_ActivityChooserView 0x7f0b0039
490 | int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f0b0037
491 | int style Widget_AppCompat_Light_Base_ActionBar 0x7f0b003b
492 | int style Widget_AppCompat_Light_Base_ActionBar_Solid 0x7f0b003d
493 | int style Widget_AppCompat_Light_Base_ActionBar_Solid_Inverse 0x7f0b003e
494 | int style Widget_AppCompat_Light_Base_ActionBar_TabBar 0x7f0b0046
495 | int style Widget_AppCompat_Light_Base_ActionBar_TabBar_Inverse 0x7f0b0047
496 | int style Widget_AppCompat_Light_Base_ActionBar_TabText 0x7f0b004c
497 | int style Widget_AppCompat_Light_Base_ActionBar_TabText_Inverse 0x7f0b004d
498 | int style Widget_AppCompat_Light_Base_ActionBar_TabView 0x7f0b0049
499 | int style Widget_AppCompat_Light_Base_ActionBar_TabView_Inverse 0x7f0b004a
500 | int style Widget_AppCompat_Light_Base_ActionButton 0x7f0b0040
501 | int style Widget_AppCompat_Light_Base_ActionButton_CloseMode 0x7f0b0042
502 | int style Widget_AppCompat_Light_Base_ActionButton_Overflow 0x7f0b0044
503 | int style Widget_AppCompat_Light_Base_ActionMode_Inverse 0x7f0b004f
504 | int style Widget_AppCompat_Light_Base_ActivityChooserView 0x7f0b0076
505 | int style Widget_AppCompat_Light_Base_AutoCompleteTextView 0x7f0b0074
506 | int style Widget_AppCompat_Light_Base_DropDownItem_Spinner 0x7f0b005e
507 | int style Widget_AppCompat_Light_Base_ListPopupWindow 0x7f0b0066
508 | int style Widget_AppCompat_Light_Base_ListView_DropDown 0x7f0b0060
509 | int style Widget_AppCompat_Light_Base_PopupMenu 0x7f0b0068
510 | int style Widget_AppCompat_Light_Base_Spinner 0x7f0b005c
511 | int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f0b0025
512 | int style Widget_AppCompat_Light_ListPopupWindow 0x7f0b002a
513 | int style Widget_AppCompat_Light_ListView_DropDown 0x7f0b0027
514 | int style Widget_AppCompat_Light_PopupMenu 0x7f0b002c
515 | int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f0b0023
516 | int style Widget_AppCompat_ListPopupWindow 0x7f0b0029
517 | int style Widget_AppCompat_ListView_DropDown 0x7f0b0026
518 | int style Widget_AppCompat_ListView_Menu 0x7f0b002d
519 | int style Widget_AppCompat_PopupMenu 0x7f0b002b
520 | int style Widget_AppCompat_ProgressBar 0x7f0b000a
521 | int style Widget_AppCompat_ProgressBar_Horizontal 0x7f0b0009
522 | int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f0b0022
523 | int style fade_animation 0x7f0b0085
524 | int[] styleable ActionBar { 0x7f010021, 0x7f010022, 0x7f010023, 0x7f010024, 0x7f010025, 0x7f010026, 0x7f010027, 0x7f010028, 0x7f010029, 0x7f01002a, 0x7f01002b, 0x7f01002c, 0x7f01002d, 0x7f01002e, 0x7f01002f, 0x7f010030, 0x7f010031, 0x7f010032, 0x7f010033 }
525 | int styleable ActionBar_background 10
526 | int styleable ActionBar_backgroundSplit 12
527 | int styleable ActionBar_backgroundStacked 11
528 | int styleable ActionBar_customNavigationLayout 13
529 | int styleable ActionBar_displayOptions 3
530 | int styleable ActionBar_divider 9
531 | int styleable ActionBar_height 1
532 | int styleable ActionBar_homeLayout 14
533 | int styleable ActionBar_icon 7
534 | int styleable ActionBar_indeterminateProgressStyle 16
535 | int styleable ActionBar_itemPadding 18
536 | int styleable ActionBar_logo 8
537 | int styleable ActionBar_navigationMode 2
538 | int styleable ActionBar_progressBarPadding 17
539 | int styleable ActionBar_progressBarStyle 15
540 | int styleable ActionBar_subtitle 4
541 | int styleable ActionBar_subtitleTextStyle 6
542 | int styleable ActionBar_title 0
543 | int styleable ActionBar_titleTextStyle 5
544 | int[] styleable ActionBarLayout { 0x010100b3 }
545 | int styleable ActionBarLayout_android_layout_gravity 0
546 | int[] styleable ActionBarWindow { 0x7f010000, 0x7f010001, 0x7f010002 }
547 | int styleable ActionBarWindow_windowActionBar 0
548 | int styleable ActionBarWindow_windowActionBarOverlay 1
549 | int styleable ActionBarWindow_windowSplitActionBar 2
550 | int[] styleable ActionMenuItemView { 0x0101013f }
551 | int styleable ActionMenuItemView_android_minWidth 0
552 | int[] styleable ActionMenuView { }
553 | int[] styleable ActionMode { 0x7f010022, 0x7f010026, 0x7f010027, 0x7f01002b, 0x7f01002d }
554 | int styleable ActionMode_background 3
555 | int styleable ActionMode_backgroundSplit 4
556 | int styleable ActionMode_height 0
557 | int styleable ActionMode_subtitleTextStyle 2
558 | int styleable ActionMode_titleTextStyle 1
559 | int[] styleable ActivityChooserView { 0x7f010066, 0x7f010067 }
560 | int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 1
561 | int styleable ActivityChooserView_initialActivityCount 0
562 | int[] styleable CompatTextView { 0x7f010069 }
563 | int styleable CompatTextView_textAllCaps 0
564 | int[] styleable LinearLayoutICS { 0x7f01002a, 0x7f010051, 0x7f010052 }
565 | int styleable LinearLayoutICS_divider 0
566 | int styleable LinearLayoutICS_dividerPadding 2
567 | int styleable LinearLayoutICS_showDividers 1
568 | int[] styleable MenuGroup { 0x0101000e, 0x010100d0, 0x01010194, 0x010101de, 0x010101df, 0x010101e0 }
569 | int styleable MenuGroup_android_checkableBehavior 5
570 | int styleable MenuGroup_android_enabled 0
571 | int styleable MenuGroup_android_id 1
572 | int styleable MenuGroup_android_menuCategory 3
573 | int styleable MenuGroup_android_orderInCategory 4
574 | int styleable MenuGroup_android_visible 2
575 | int[] styleable MenuItem { 0x01010002, 0x0101000e, 0x010100d0, 0x01010106, 0x01010194, 0x010101de, 0x010101df, 0x010101e1, 0x010101e2, 0x010101e3, 0x010101e4, 0x010101e5, 0x0101026f, 0x7f010049, 0x7f01004a, 0x7f01004b, 0x7f01004c }
576 | int styleable MenuItem_actionLayout 14
577 | int styleable MenuItem_actionProviderClass 16
578 | int styleable MenuItem_actionViewClass 15
579 | int styleable MenuItem_android_alphabeticShortcut 9
580 | int styleable MenuItem_android_checkable 11
581 | int styleable MenuItem_android_checked 3
582 | int styleable MenuItem_android_enabled 1
583 | int styleable MenuItem_android_icon 0
584 | int styleable MenuItem_android_id 2
585 | int styleable MenuItem_android_menuCategory 5
586 | int styleable MenuItem_android_numericShortcut 10
587 | int styleable MenuItem_android_onClick 12
588 | int styleable MenuItem_android_orderInCategory 6
589 | int styleable MenuItem_android_title 7
590 | int styleable MenuItem_android_titleCondensed 8
591 | int styleable MenuItem_android_visible 4
592 | int styleable MenuItem_showAsAction 13
593 | int[] styleable MenuView { 0x010100ae, 0x0101012c, 0x0101012d, 0x0101012e, 0x0101012f, 0x01010130, 0x01010131, 0x01010435 }
594 | int styleable MenuView_android_headerBackground 4
595 | int styleable MenuView_android_horizontalDivider 2
596 | int styleable MenuView_android_itemBackground 5
597 | int styleable MenuView_android_itemIconDisabledAlpha 6
598 | int styleable MenuView_android_itemTextAppearance 1
599 | int styleable MenuView_android_preserveIconSpacing 7
600 | int styleable MenuView_android_verticalDivider 3
601 | int styleable MenuView_android_windowAnimationStyle 0
602 | int[] styleable SearchView { 0x0101011f, 0x01010220, 0x01010264, 0x7f010056, 0x7f010057 }
603 | int styleable SearchView_android_imeOptions 2
604 | int styleable SearchView_android_inputType 1
605 | int styleable SearchView_android_maxWidth 0
606 | int styleable SearchView_iconifiedByDefault 3
607 | int styleable SearchView_queryHint 4
608 | int[] styleable Spinner { 0x010100af, 0x01010175, 0x01010176, 0x01010262, 0x010102ac, 0x010102ad, 0x7f01004d, 0x7f01004e, 0x7f01004f, 0x7f010050 }
609 | int styleable Spinner_android_dropDownHorizontalOffset 4
610 | int styleable Spinner_android_dropDownSelector 1
611 | int styleable Spinner_android_dropDownVerticalOffset 5
612 | int styleable Spinner_android_dropDownWidth 3
613 | int styleable Spinner_android_gravity 0
614 | int styleable Spinner_android_popupBackground 2
615 | int styleable Spinner_disableChildrenWhenDisabled 9
616 | int styleable Spinner_popupPromptView 8
617 | int styleable Spinner_prompt 6
618 | int styleable Spinner_spinnerMode 7
619 | int[] styleable Theme { 0x7f010043, 0x7f010044, 0x7f010045, 0x7f010046, 0x7f010047, 0x7f010048 }
620 | int styleable Theme_actionDropDownStyle 0
621 | int styleable Theme_dropdownListPreferredItemHeight 1
622 | int styleable Theme_listChoiceBackgroundIndicator 5
623 | int styleable Theme_panelMenuListTheme 4
624 | int styleable Theme_panelMenuListWidth 3
625 | int styleable Theme_popupMenuStyle 2
626 | int[] styleable View { 0x010100da, 0x7f010034, 0x7f010035 }
627 | int styleable View_android_focusable 0
628 | int styleable View_paddingEnd 2
629 | int styleable View_paddingStart 1
630 |
--------------------------------------------------------------------------------
/bin/classes.dex:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes.dex
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$anim.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$anim.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$attr.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$attr.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$bool.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$bool.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$color.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$color.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$dimen.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$dimen.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$drawable.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$drawable.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$id.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$id.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$integer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$integer.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$layout.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$layout.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$string.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$string.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$style.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$style.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R$styleable.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R$styleable.class
--------------------------------------------------------------------------------
/bin/classes/android/support/v7/appcompat/R.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/android/support/v7/appcompat/R.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/BuildConfig.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/BuildConfig.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ContentsWrapper.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ContentsWrapper.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$1.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$2.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$3.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$4.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$4.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$5.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity$5.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/EggsampleActivity.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$1.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$10.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$10.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$11.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$11.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$12.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$12.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$13.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$13.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$2.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$3.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$4.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$4.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$5.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$5.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$6.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$6.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$7.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$7.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$8.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$8.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$9.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$9.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$Axis.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$Axis.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$ListViewAnimatorCallbacks.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator$ListViewAnimatorCallbacks.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/ListViewAnimator.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$anim.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$anim.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$attr.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$attr.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$bool.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$bool.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$color.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$color.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$dimen.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$dimen.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$drawable.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$drawable.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$id.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$id.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$integer.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$integer.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$layout.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$layout.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$menu.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$menu.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$string.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$string.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$style.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$style.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R$styleable.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R$styleable.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/R.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/R.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$1.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$ImageLoaderTask.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$ImageLoaderTask.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$LoadedDrawable.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter$LoadedDrawable.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/StableWrapperArrayAdapter.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$1.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$1.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$2.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$2.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$3.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$3.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$4.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$4.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$5.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$5.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$6.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$6.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$7.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$7.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$DismissCallbacks.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener$DismissCallbacks.class
--------------------------------------------------------------------------------
/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener.class:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/classes/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener.class
--------------------------------------------------------------------------------
/bin/dexedLibs/android-support-v4-b4c5268c5b956bdd1597c5f0653b82de.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/dexedLibs/android-support-v4-b4c5268c5b956bdd1597c5f0653b82de.jar
--------------------------------------------------------------------------------
/bin/dexedLibs/android-support-v7-appcompat-1a38b72b10fdea95da24f4abd8511b10.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/dexedLibs/android-support-v7-appcompat-1a38b72b10fdea95da24f4abd8511b10.jar
--------------------------------------------------------------------------------
/bin/dexedLibs/appcompat_v7-46a22a1d0035bb0e0ee4bdc1bb212b97.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/dexedLibs/appcompat_v7-46a22a1d0035bb0e0ee4bdc1bb212b97.jar
--------------------------------------------------------------------------------
/bin/dexedLibs/nineoldandroids-2.4.0-6328dc3faf7867f331d270a0bcccf17f.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/dexedLibs/nineoldandroids-2.4.0-6328dc3faf7867f331d270a0bcccf17f.jar
--------------------------------------------------------------------------------
/bin/dexedLibs/swipetodismissundolist-master-c7bdecb1d679afb13e828cf9570f6637.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/dexedLibs/swipetodismissundolist-master-c7bdecb1d679afb13e828cf9570f6637.jar
--------------------------------------------------------------------------------
/bin/jarlist.cache:
--------------------------------------------------------------------------------
1 | # cache for current jar dependency. DO NOT EDIT.
2 | # format is
3 | # Encoding is UTF-8
4 | 1399800660724 621451 5896b0a4e377ac4242eb2bc785220c1c4fc052f4 D:\Dropbox\Java\newsAlarm_workspace\appcompat_v7\libs\android-support-v4.jar
5 | 1400957789375 621451 5896b0a4e377ac4242eb2bc785220c1c4fc052f4 D:\Dropbox\Java\newsAlarm_workspace\ListViewAnimator\libs\android-support-v4.jar
6 |
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/add.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/card2.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/card2.9.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/card6.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/card6.9.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/ic_action_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/ic_action_undo.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xhdpi/list.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xhdpi/list.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/bad_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/bad_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/baked_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/baked_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/basted_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/basted_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/caviar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/caviar.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/chicken_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/chicken_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/coddled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/coddled_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/duck_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/duck_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/eggcellent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/eggcellent.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/eggs_benedict.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/eggs_benedict.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/eggstraterrestrial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/eggstraterrestrial.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/eggstravagant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/eggstravagant.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/emu_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/emu_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/fried_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/fried_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/good_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/good_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/goose_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/goose_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/hard_boiled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/hard_boiled_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/large_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/large_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/medium_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/medium_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/omelette.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/omelette.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/ostrich_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/ostrich_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/pheasant_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/pheasant_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/pickled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/pickled_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/poached_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/poached_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/quail_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/quail_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/scotch_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/scotch_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/scrambled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/scrambled_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/shirred_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/shirred_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/small_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/small_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/soft_boiled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/soft_boiled_egg.png
--------------------------------------------------------------------------------
/bin/res/crunch/drawable/tea_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/res/crunch/drawable/tea_egg.png
--------------------------------------------------------------------------------
/bin/resources.ap_:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/bin/resources.ap_
--------------------------------------------------------------------------------
/gen/com/witheyjr/listviewanimator/BuildConfig.java:
--------------------------------------------------------------------------------
1 | /** Automatically generated file. DO NOT MODIFY */
2 | package com.witheyjr.listviewanimator;
3 |
4 | public final class BuildConfig {
5 | public final static boolean DEBUG = true;
6 | }
--------------------------------------------------------------------------------
/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/ic_launcher-web.png
--------------------------------------------------------------------------------
/libs/android-support-v4.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/libs/android-support-v4.jar
--------------------------------------------------------------------------------
/libs/nineoldandroids-2.4.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/libs/nineoldandroids-2.4.0.jar
--------------------------------------------------------------------------------
/proguard-project.txt:
--------------------------------------------------------------------------------
1 | # To enable ProGuard in your project, edit project.properties
2 | # to define the proguard.config property as described in that file.
3 | #
4 | # Add project specific ProGuard rules here.
5 | # By default, the flags in this file are appended to flags specified
6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt
7 | # You can edit the include path and order by changing the ProGuard
8 | # include property in project.properties.
9 | #
10 | # For more details, see
11 | # http://developer.android.com/guide/developing/tools/proguard.html
12 |
13 | # Add any project specific keep options here:
14 |
15 | # If your project uses WebView with JS, uncomment the following
16 | # and specify the fully qualified class name to the JavaScript interface
17 | # class:
18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
19 | # public *;
20 | #}
21 |
--------------------------------------------------------------------------------
/project.properties:
--------------------------------------------------------------------------------
1 | # This file is automatically generated by Android Tools.
2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
3 | #
4 | # This file must be checked in Version Control Systems.
5 | #
6 | # To customize properties used by the Ant build system edit
7 | # "ant.properties", and override values to adapt the script to your
8 | # project structure.
9 | #
10 | # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
11 | #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
12 |
13 | # Project target.
14 | target=android-19
15 | android.library.reference.1=..\\appcompat_v7
16 |
--------------------------------------------------------------------------------
/res/anim/popup_hide.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/res/anim/popup_show.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xhdpi/add.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/card2.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xhdpi/card2.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/card6.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xhdpi/card6.9.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_action_undo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xhdpi/ic_action_undo.png
--------------------------------------------------------------------------------
/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/res/drawable/bad_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/bad_egg.png
--------------------------------------------------------------------------------
/res/drawable/baked_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/baked_egg.png
--------------------------------------------------------------------------------
/res/drawable/basted_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/basted_egg.png
--------------------------------------------------------------------------------
/res/drawable/caviar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/caviar.png
--------------------------------------------------------------------------------
/res/drawable/chicken_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/chicken_egg.png
--------------------------------------------------------------------------------
/res/drawable/coddled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/coddled_egg.png
--------------------------------------------------------------------------------
/res/drawable/duck_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/duck_egg.png
--------------------------------------------------------------------------------
/res/drawable/eggcellent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/eggcellent.png
--------------------------------------------------------------------------------
/res/drawable/eggs_benedict.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/eggs_benedict.png
--------------------------------------------------------------------------------
/res/drawable/eggstraterrestrial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/eggstraterrestrial.png
--------------------------------------------------------------------------------
/res/drawable/eggstravagant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/eggstravagant.png
--------------------------------------------------------------------------------
/res/drawable/emu_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/emu_egg.png
--------------------------------------------------------------------------------
/res/drawable/fried_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/fried_egg.png
--------------------------------------------------------------------------------
/res/drawable/good_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/good_egg.png
--------------------------------------------------------------------------------
/res/drawable/goose_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/goose_egg.png
--------------------------------------------------------------------------------
/res/drawable/hard_boiled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/hard_boiled_egg.png
--------------------------------------------------------------------------------
/res/drawable/large_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/large_egg.png
--------------------------------------------------------------------------------
/res/drawable/medium_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/medium_egg.png
--------------------------------------------------------------------------------
/res/drawable/omelette.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/omelette.png
--------------------------------------------------------------------------------
/res/drawable/ostrich_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/ostrich_egg.png
--------------------------------------------------------------------------------
/res/drawable/pheasant_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/pheasant_egg.png
--------------------------------------------------------------------------------
/res/drawable/pickled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/pickled_egg.png
--------------------------------------------------------------------------------
/res/drawable/poached_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/poached_egg.png
--------------------------------------------------------------------------------
/res/drawable/popup_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/quail_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/quail_egg.png
--------------------------------------------------------------------------------
/res/drawable/scotch_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/scotch_egg.png
--------------------------------------------------------------------------------
/res/drawable/scrambled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/scrambled_egg.png
--------------------------------------------------------------------------------
/res/drawable/shirred_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/shirred_egg.png
--------------------------------------------------------------------------------
/res/drawable/small_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/small_egg.png
--------------------------------------------------------------------------------
/res/drawable/soft_boiled_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/soft_boiled_egg.png
--------------------------------------------------------------------------------
/res/drawable/tea_egg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/res/drawable/tea_egg.png
--------------------------------------------------------------------------------
/res/drawable/undo_btn_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/res/drawable/undo_btn_bg_focused.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/drawable/undo_btn_bg_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/res/layout/eggsample_image_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
23 |
24 |
35 |
36 |
37 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/res/layout/eggsample_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/res/layout/fragment_main.xml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/res/layout/undo_popup.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
20 |
21 |
30 |
31 |
43 |
--------------------------------------------------------------------------------
/res/menu/main.xml:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/res/values-v11/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/res/values-v14/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 | 64dp
9 |
10 |
11 |
--------------------------------------------------------------------------------
/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ff33b5e5
4 | #ff0099cc
5 | #00000000
6 |
7 | #EE666666
8 | #BBBBBB
9 | #FFFFFF
10 |
--------------------------------------------------------------------------------
/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 16dp
5 | 16dp
6 |
7 |
8 |
--------------------------------------------------------------------------------
/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ListViewAnimator
5 | ListViewAnimator
6 | Hello world!
7 | Settings
8 | UNDO
9 |
10 |
11 |
--------------------------------------------------------------------------------
/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
14 |
15 |
16 |
19 |
20 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/witheyjr/ListViewAnimator/bf3b98fe9d82ba151d91c0920294d46a5f339496/screenshot.png
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/ContentsWrapper.java:
--------------------------------------------------------------------------------
1 | package com.witheyjr.listviewanimator;
2 |
3 | /**
4 | * Simple a wrapper class to hold text and an image resource id
5 | */
6 | public class ContentsWrapper {
7 |
8 | private String text;
9 | private int imageResource;
10 |
11 | public ContentsWrapper(String text) {
12 | this.text = text;
13 | }
14 |
15 | public ContentsWrapper(String text, int imageResource) {
16 | this(text);
17 | this.imageResource = imageResource;
18 | }
19 |
20 | public String getContents() {
21 | return text;
22 | }
23 |
24 | public int getImageResource() {
25 | return imageResource;
26 | }
27 | }
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/EggsampleActivity.java:
--------------------------------------------------------------------------------
1 | /*
2 | * ******************************************************************************
3 | * Copyright (c) 2014 J Withey.
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | * *****************************************************************************
17 | */
18 |
19 | package com.witheyjr.listviewanimator;
20 |
21 | import java.util.ArrayList;
22 | import android.support.v7.app.ActionBarActivity;
23 | import android.content.Context;
24 | import android.os.Bundle;
25 | import android.os.Handler;
26 | import android.view.Gravity;
27 | import android.view.LayoutInflater;
28 | import android.view.Menu;
29 | import android.view.MenuItem;
30 | import android.view.View;
31 | import android.widget.AdapterView;
32 | import android.widget.AdapterView.OnItemClickListener;
33 | import android.widget.Button;
34 | import android.widget.ListView;
35 | import android.widget.PopupWindow;
36 | import android.widget.TextView;
37 | import android.widget.Toast;
38 |
39 | public class EggsampleActivity extends ActionBarActivity {
40 |
41 | private ListView mListView;
42 | private StableWrapperArrayAdapter mAdapter;
43 | private ListViewAnimator mListViewAnimator;
44 | private SwipeDismissListViewTouchListener mTouchListener;
45 | private PopupWindow mUndoPopup;
46 | private TextView mUndoText;
47 | private Button mUndoButton;
48 | private float mDensity;
49 | private ContentsWrapper toUndoOrRemove;
50 | private Boolean isRunning;
51 | private int adapterRemoveId;
52 | private MenuItem addButton;
53 |
54 | private String[] eggs = { "Fried egg", "Poached egg", "Hard-boiled egg", "Soft-boiled egg",
55 | "Scrambled egg", "Large egg", "Medium egg", "Small egg", "Chicken egg", "Duck egg",
56 | "Goose egg", "Quail egg", "Coddled egg", "Shirred egg", "Basted egg", "Baked egg",
57 | "Eggs benedict", "Pickled egg", "Scotch egg", "Tea egg", "Omelette", "Good egg",
58 | "Baaaaad egg", "Caviar", "Ostrich egg", "Pheasant egg", "Emu egg", "Eggcellent",
59 | "Eggstraterrestrial", "Eggstravagant" };
60 |
61 | private int index = eggs.length - 1;
62 |
63 | private int[] eggImages = { R.drawable.fried_egg, R.drawable.poached_egg, R.drawable.hard_boiled_egg, R.drawable.soft_boiled_egg,
64 | R.drawable.scrambled_egg, R.drawable.large_egg, R.drawable.medium_egg, R.drawable.small_egg, R.drawable.chicken_egg,
65 | R.drawable.duck_egg, R.drawable.goose_egg, R.drawable.quail_egg, R.drawable.coddled_egg, R.drawable.shirred_egg,
66 | R.drawable.basted_egg, R.drawable.baked_egg, R.drawable.eggs_benedict, R.drawable.pickled_egg, R.drawable.scotch_egg,
67 | R.drawable.tea_egg, R.drawable.omelette, R.drawable.good_egg, R.drawable.bad_egg, R.drawable.caviar, R.drawable.ostrich_egg,
68 | R.drawable.pheasant_egg, R.drawable.emu_egg, R.drawable.eggcellent, R.drawable.eggstraterrestrial, R.drawable.eggstravagant };
69 |
70 | @Override
71 | protected void onCreate(Bundle savedInstanceState) {
72 | super.onCreate(savedInstanceState);
73 | setContentView(R.layout.activity_main);
74 | mListView = (ListView) findViewById(R.id.list);
75 | ArrayList eggList = new ArrayList();
76 | for (int i = 0; i < eggs.length; ++i) {
77 | eggList.add(new ContentsWrapper(eggs[i], eggImages[i]));
78 | }
79 | mAdapter = new StableWrapperArrayAdapter(this, R.layout.eggsample_image_item, eggList);
80 | mListView.setAdapter(mAdapter);
81 | mTouchListener = new SwipeDismissListViewTouchListener(
82 | mListView,
83 | new SwipeDismissListViewTouchListener.DismissCallbacks() {
84 | @Override
85 | public void onDismiss(View viewToRemove, int position) {
86 | mListViewAnimator.animateRemoval(viewToRemove, position);
87 | }
88 | @Override
89 | public boolean canDismiss(int position) {
90 | mUndoPopup.dismiss(); // dismiss it if user touches away from popup
91 | return !mListViewAnimator.listViewIsAnimating();
92 | }
93 | @Override
94 | public void currentlyAnimatingSwipeOrScroll(boolean isAnimating) {
95 | addButton.setEnabled(!isAnimating);
96 | }
97 | });
98 | mListView.setOnTouchListener(mTouchListener);
99 | mListView.setOnScrollListener(mTouchListener.makeScrollListener());
100 | mListView.setOnItemClickListener(new OnItemClickListener() {
101 | @Override
102 | public void onItemClick(AdapterView> parent, View view,
103 | int position, long id) {
104 | TextView textView = (TextView) view.findViewById(R.id.title);
105 | if (textView != null) {
106 | String text = "Clicked '" + textView.getText() + "'";
107 | Toast.makeText(EggsampleActivity.this, text, Toast.LENGTH_SHORT).show();
108 | }
109 | }
110 | });
111 | setUpUndoPopup();
112 | }
113 |
114 | /** Set up the undo popup style and size */
115 | private void setUpUndoPopup() {
116 | mDensity = mListView.getResources().getDisplayMetrics().density;
117 | LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
118 | View undoPopupView = inflater.inflate(R.layout.undo_popup, null);
119 | mUndoButton = (Button)undoPopupView.findViewById(R.id.undo);
120 | mUndoText = (TextView)undoPopupView.findViewById(R.id.text);
121 | mUndoText.setText("");
122 | mUndoPopup = new PopupWindow(undoPopupView);
123 | mUndoPopup.setAnimationStyle(R.style.fade_animation);
124 | // Get screen width in dp and set width of popup respectively
125 | int xdensity = (int)(mListView.getContext().getResources().getDisplayMetrics().widthPixels / mDensity);
126 | if(xdensity < 300) {
127 | mUndoPopup.setWidth((int)(mDensity * 280));
128 | } else if (xdensity < 350) {
129 | mUndoPopup.setWidth((int)(mDensity * 300));
130 | } else if (xdensity < 500) {
131 | mUndoPopup.setWidth((int)(mDensity * 330));
132 | } else {
133 | mUndoPopup.setWidth((int)(mDensity * 450));
134 | }
135 | mUndoPopup.setHeight((int)(mDensity * 56));
136 | }
137 |
138 | @Override
139 | protected void onResume() {
140 | super.onResume();
141 | isRunning = true;
142 | }
143 |
144 | @Override
145 | protected void onPause() {
146 | super.onPause();
147 | isRunning = false;
148 | try {
149 | mUndoPopup.dismiss();
150 | } catch (Exception e) {
151 | e.printStackTrace();
152 | }
153 | }
154 |
155 | @Override
156 | protected void onStart() {
157 | super.onStart();
158 | mUndoButton.setOnClickListener(new View.OnClickListener() {
159 | @Override
160 | public void onClick(View v) {
161 | mListViewAnimator.animateAddition(toUndoOrRemove, adapterRemoveId);
162 | mUndoPopup.dismiss();
163 | addButton.setEnabled(false);
164 | }
165 | });
166 | mListViewAnimator = new ListViewAnimator(mListView, new ListViewAnimator.ListViewAnimatorCallbacks() {
167 | @Override
168 | public void undoCallback() {
169 | String title = toUndoOrRemove.getContents();
170 | mUndoText.setText("Removed '" + title + "'");
171 | if (isRunning) { // Check if isRunning in order to prevent rare crash if user swipes and exits app
172 | try {
173 | mUndoPopup.showAtLocation(mListView,
174 | Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM,
175 | 0, (int)(mDensity * 15));
176 | timeDismissUndoMessage();
177 | } catch (Exception e) {
178 | e.printStackTrace();
179 | }
180 | }
181 | }
182 | @Override
183 | public void deleteAdapterItemCallback(int position) {
184 | adapterRemoveId = position;
185 | toUndoOrRemove = mAdapter.getItem(position);
186 | mAdapter.remove(mAdapter.getItem(position));
187 | mAdapter.notifyDataSetChanged();
188 | }
189 | @Override
190 | public void addButtonSetEnabledCallback(boolean isEnabled) {
191 | addButton.setEnabled(isEnabled);
192 | }
193 | @Override
194 | public long getItemIdForAnimation(int position) {
195 | return mAdapter.getItemIdForAnimation(position);
196 | }
197 | @Override
198 | public void addAdapterItemCallback(int pos, Object itemToAdd) {
199 | ContentsWrapper toAdd = (ContentsWrapper) itemToAdd;
200 | mAdapter.insert(toAdd, pos);
201 | mAdapter.reIdMapObjects();
202 | mAdapter.notifyDataSetChanged();
203 | }
204 | });
205 |
206 | }
207 |
208 | private Handler handler = new Handler();
209 | Runnable runnable = new Runnable() {
210 | @Override
211 | public void run() {
212 | try {
213 | mUndoPopup.dismiss();
214 | } catch (Exception e) {
215 | e.printStackTrace();
216 | }
217 | }
218 | };
219 |
220 | /** Simply removes the undo popup after a 5 second delay once called */
221 | private void timeDismissUndoMessage() {
222 | handler.removeCallbacks(runnable);
223 | handler.postDelayed(runnable, 5000); // 5 second delay
224 | }
225 |
226 | @Override
227 | public boolean onCreateOptionsMenu(Menu menu) {
228 | getMenuInflater().inflate(R.menu.main, menu);
229 | addButton = menu.findItem(R.id.add);
230 | addButton.setEnabled(true);
231 | return true;
232 | }
233 |
234 | @Override
235 | public boolean onOptionsItemSelected(MenuItem item) {
236 | switch (item.getItemId()) {
237 | case R.id.add:
238 | item.setEnabled(false);
239 | mUndoPopup.dismiss();
240 | mListViewAnimator.animateAddition(new ContentsWrapper(eggs[index], eggImages[index]));
241 | index = index == 0 ? eggs.length - 1 : --index;
242 | return true;
243 | default:
244 | break;
245 | }
246 | return super.onOptionsItemSelected(item);
247 | }
248 | }
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/ListViewAnimator.java:
--------------------------------------------------------------------------------
1 | /*
2 | * ******************************************************************************
3 | * Copyright (c) 2014 J Withey.
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | * *****************************************************************************
17 | */
18 |
19 | package com.witheyjr.listviewanimator;
20 |
21 | import static com.nineoldandroids.view.ViewHelper.setTranslationX;
22 | import static com.nineoldandroids.view.ViewHelper.setTranslationY;
23 | import static com.nineoldandroids.view.ViewHelper.setAlpha;
24 | import java.util.HashMap;
25 | import android.animation.Animator.AnimatorListener;
26 | import android.annotation.SuppressLint;
27 | import android.os.Build;
28 | import android.view.View;
29 | import android.view.ViewTreeObserver;
30 | import android.view.animation.AccelerateDecelerateInterpolator;
31 | import android.widget.ListView;
32 | import com.nineoldandroids.animation.Animator;
33 | import com.nineoldandroids.animation.AnimatorListenerAdapter;
34 | import com.nineoldandroids.view.ViewPropertyAnimator;
35 |
36 | /**
37 | * @author J Withey
38 | * ListViewAnimator allows support for animating the removal and addition of items in a ListView.
39 | * Undo is also supported via callbacks. Based on open source code by the DevBytes team:
40 | * http://graphics-geek.blogspot.co.uk/2013/06/devbytes-animating-listview-deletion.html
41 | */
42 | public class ListViewAnimator {
43 |
44 | /** To decide between translating Y or X axes in animation */
45 | private enum Axis {
46 | X, Y;
47 | }
48 |
49 | private ListView mListView;
50 | private static final int MOVE_DURATION = 250;
51 | private AccelerateDecelerateInterpolator mInterpolator = new AccelerateDecelerateInterpolator();
52 | private ListViewAnimatorCallbacks mCallbacks;
53 |
54 | private boolean belowApi12 = false;
55 | private boolean belowApi16 = false;
56 | private boolean currentlyAnimating = false;
57 |
58 | /* This stores the coordinates of the top of each View, so that when we animate removal of
59 | * items, we can animate them into the correct position based on where the other views are. */
60 | private HashMap mItemIdTopMap = new HashMap();
61 |
62 | public ListViewAnimator(ListView listView, ListViewAnimatorCallbacks callbacks) {
63 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
64 | belowApi12 = true;
65 | } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
66 | belowApi16 = true;
67 | }
68 | this.mCallbacks = callbacks;
69 | this.mListView = listView;
70 | }
71 |
72 | /**
73 | * Callbacks for the Activity to implement to support functionality around the animations,
74 | * such as adding or removing items from adapter, supporting undo and enabling/disabling
75 | * buttons.
76 | */
77 | public interface ListViewAnimatorCallbacks {
78 | /**
79 | * Here the remove(), notifyDatasetChanged() etc. are carried out after the view has been
80 | * swiped away. After this has been called, the views are subsequently animated to fill
81 | * the gap. The present implementation includes undo functionality.
82 | */
83 | void deleteAdapterItemCallback(int position);
84 |
85 | /**
86 | * This is called when the removal animation ends. You can choose to fill this method or not
87 | * with code that will show a PopupWindow with option to undo the last deleted item.
88 | */
89 | void undoCallback();
90 |
91 | /**
92 | * In order not to cause glitchy animations, the button used to add items is disabled and enabled
93 | * here. Once the animation is finished, the add button(s) is enabled again.
94 | */
95 | void addButtonSetEnabledCallback(boolean enabled);
96 |
97 | /**
98 | * Called when an item needs to be added. This is after the views below the item have moved and
99 | * given way for the new view to appear.
100 | */
101 | void addAdapterItemCallback(int pos, Object itemToAdd);
102 |
103 | /**
104 | * This could potentially simply be the result of getItemId() in the Adapter,
105 | * but for my implementation this is used, hence the option to get id
106 | * another way.
107 | */
108 | long getItemIdForAnimation(int position);
109 | }
110 |
111 | /** In this implementation, this is to disable swiping which may cause animation glitches */
112 | public boolean listViewIsAnimating() {
113 | return currentlyAnimating;
114 | }
115 |
116 | /** Used to set the pre-animation parameters as appropriate for API level and axis of
117 | * animation.
118 | */
119 | @SuppressLint("NewApi")
120 | private void setPreAnimationParameters(View view, int delta, Axis axis) {
121 | if (belowApi12) {
122 | if (axis == Axis.X) {
123 | setTranslationX(view, delta);
124 | setAlpha(view, 0);
125 | } else {
126 | setTranslationY(view, delta);
127 | }
128 | } else {
129 | if (axis == Axis.X) {
130 | view.setTranslationX(delta);
131 | view.setAlpha(0);
132 | } else {
133 | view.setTranslationY(delta);
134 | }
135 | }
136 | }
137 |
138 | /** Animate the view appropriately for the chosen axis
139 | * @param view The view to animate
140 | * @param to The value to animate to
141 | * @param axis The axis of which to animate the translation
142 | */
143 | @SuppressLint("NewApi")
144 | private void animateAxis(View view, float to, Axis axis) {
145 | if (belowApi12) {
146 | ViewPropertyAnimator animator = ViewPropertyAnimator.animate(view)
147 | .setDuration(MOVE_DURATION)
148 | // axis == axis.X ? .translationX(to) : .translationY(to)
149 | .setInterpolator(mInterpolator);
150 | if (axis == Axis.X) {
151 | animator.translationX(to)
152 | .alpha(1);
153 | } else {
154 | animator.translationY(to);
155 | }
156 | } else {
157 | android.view.ViewPropertyAnimator animator = view.animate()
158 | .setDuration(MOVE_DURATION)
159 | .setInterpolator(mInterpolator);
160 | if (axis == Axis.X) {
161 | animator.translationX(to)
162 | .alpha(1);
163 | } else {
164 | animator.translationY(to);
165 | }
166 | }
167 | }
168 |
169 | /** This code attaches onto an existing animation (so we need no duration etc. here)
170 | * and is useful for re-enabling the ListView etc. after all animations have finished.
171 | * @param view The animated view that we are attaching an end action onto
172 | */
173 | @SuppressLint("NewApi")
174 | private void afterFirstRemoval(View view) {
175 | if (belowApi12) {
176 | ViewPropertyAnimator.animate(view).setListener(new AnimatorListenerAdapter() {
177 | @Override
178 | public void onAnimationEnd(Animator animation) {
179 | afterAllRemovalAnimations();
180 | }
181 | });
182 | } else if (belowApi16) {
183 | view.animate().setListener(new AnimatorListener() {
184 | @Override public void onAnimationStart(android.animation.Animator animation) { }
185 | @Override
186 | public void onAnimationEnd(android.animation.Animator animation) {
187 | afterAllRemovalAnimations();
188 | }
189 | @Override public void onAnimationCancel(android.animation.Animator animation) { }
190 | @Override public void onAnimationRepeat(android.animation.Animator animation) { }
191 | });
192 | } else {
193 | view.animate().withEndAction(new Runnable() { // position = current animating view pos in adapter
194 | public void run() {
195 | afterAllRemovalAnimations();
196 | }
197 | });
198 | }
199 | }
200 |
201 | /**
202 | * This method animates all other views in the ListView container (not including ignoreView)
203 | * into their final positions. It is called after ignoreView has been removed from the
204 | * adapter, but before layout has been run. The approach here is to figure out where
205 | * everything is now, then allow layout to run, then figure out where everything is after
206 | * layout, and then to run animations between all of those start/end positions.
207 | */
208 | @SuppressLint("NewApi")
209 | public void animateRemoval(View viewToRemove, int adapterPos) {
210 | currentlyAnimating = true;
211 | mCallbacks.addButtonSetEnabledCallback(false);
212 | int firstVisiblePosition = mListView.getFirstVisiblePosition();
213 | final int preDeleteChildCount = mListView.getChildCount();
214 | for (int i = 0; i < preDeleteChildCount; ++i) {
215 | View child = mListView.getChildAt(i);
216 | if (child != viewToRemove) {
217 | int position = firstVisiblePosition + i;
218 | long itemId = mCallbacks.getItemIdForAnimation(position);
219 | mItemIdTopMap.put(itemId, child.getTop());
220 | }
221 | }
222 | mCallbacks.deleteAdapterItemCallback(adapterPos);
223 | final ViewTreeObserver observer = mListView.getViewTreeObserver();
224 | observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
225 | public boolean onPreDraw() {
226 | observer.removeOnPreDrawListener(this);
227 | boolean firstAnimation = true;
228 | int firstVisiblePosition = mListView.getFirstVisiblePosition(); // get adapter's pos of view, as 0 in listView may != 0 in adapter
229 | boolean didAnimate = false;
230 | for (int i = 0; i < mListView.getChildCount(); ++i) { // for each visible listView child
231 | final View child = mListView.getChildAt(i);
232 | int position = firstVisiblePosition + i;
233 | long itemId = mCallbacks.getItemIdForAnimation(position); // position in adapter
234 | Integer startTop = mItemIdTopMap.get(itemId); // the start point of the top of current child. We need this to decide where to animate from
235 | int top = child.getTop();
236 | if (startTop != null) { // startTop not null means child was already visible when other view swiped.
237 | if (startTop != top) { // check if the starting and end positions aren't the same. Only animate if so.
238 | didAnimate = true; // didAnimate flag used for re-enabling elements disabled to prevent animation glitches
239 | int delta = startTop - top; // delta = startPosition for child to animate from (where it was!)
240 | setPreAnimationParameters(child, delta, Axis.Y);
241 | animateAxis(child, 0, Axis.Y);
242 | if (firstAnimation) {
243 | afterFirstRemoval(child);
244 | firstAnimation = false;
245 | }
246 | }
247 | } else { // this view was not visible before the view was removed!
248 | /*Animate new views along with the others. The catch is that they did not
249 | exist in the start state, so we must calculate their starting position
250 | based on neighbouring views.*/
251 | int childHeight = child.getHeight() + mListView.getDividerHeight();
252 | startTop = top + (i > 0 ? childHeight : -childHeight);
253 | int delta = startTop - top;
254 | setPreAnimationParameters(child, delta, Axis.Y);
255 | animateAxis(child, 0, Axis.Y);
256 | if (firstAnimation) {
257 | afterFirstRemoval(child);
258 | firstAnimation = false;
259 | }
260 | }
261 | }
262 | if (!didAnimate) { // reenable listView if no views were animated
263 | afterAllRemovalAnimations();
264 | }
265 | mItemIdTopMap.clear();
266 | return true;
267 | }
268 | });
269 | }
270 |
271 | /** Called when all removal animations are complete. ListView and 'add button' are re-enabled.
272 | * Undo option given as possibility.
273 | */
274 | private void afterAllRemovalAnimations() {
275 | mListView.setEnabled(true);
276 | mCallbacks.addButtonSetEnabledCallback(true);
277 | mCallbacks.undoCallback();
278 | currentlyAnimating = false;
279 | }
280 |
281 | /** Called when all addition animations are complete. ListView and 'add button' are re-enabled.
282 | */
283 | private void afterAllAdditionAnimations() {
284 | mCallbacks.addButtonSetEnabledCallback(true);
285 | mListView.setEnabled(true);
286 | }
287 |
288 | /** This code supplements the existing animation that may be running on the view.
289 | * @param view The animated view that we are attaching an end action onto
290 | */
291 | @SuppressLint("NewApi")
292 | private void afterAddition(View view) {
293 | if (belowApi12) {
294 | ViewPropertyAnimator.animate(view).setListener(new AnimatorListenerAdapter() {
295 | @Override
296 | public void onAnimationEnd(Animator animation) {
297 | afterAllAdditionAnimations();
298 | }
299 | });
300 | } else if (belowApi16) {
301 | view.animate().setListener(new AnimatorListener() {
302 | @Override public void onAnimationStart(android.animation.Animator animation) { }
303 | @Override
304 | public void onAnimationEnd(android.animation.Animator animation) {
305 | afterAllAdditionAnimations();
306 | }
307 | @Override public void onAnimationCancel(android.animation.Animator animation) { }
308 | @Override public void onAnimationRepeat(android.animation.Animator animation) { }
309 | });
310 | } else {
311 | view.animate().withEndAction(new Runnable() {
312 | public void run() {
313 | afterAllAdditionAnimations();
314 | }
315 | });
316 | }
317 | }
318 |
319 | /** For additions, views are first animated to make room for the new view, then the new view is added
320 | * and animated in. This code attaches onto existing animation (thus no duration etc.) to add when
321 | * the animation is complete.
322 | * @param view The view that is already animating that we attach this onAnimationEnd onto
323 | * @param pos The position within the adapter that we wish to add an item
324 | * @param itemToAdd The object that we wish to add to the adapter
325 | * @param firstVisiblePosition The position within the adapter of the first visible position in the
326 | * ListView
327 | */
328 | @SuppressLint("NewApi")
329 | private void afterViewsMadeWayForAddition(View view, final int pos, final Object itemToAdd, final int firstVisiblePosition) {
330 | if (belowApi12) {
331 | ViewPropertyAnimator.animate(view).setListener(new AnimatorListenerAdapter() {
332 | @Override
333 | public void onAnimationEnd(Animator animation) {
334 | addThenAnimateAddedView(pos, itemToAdd, firstVisiblePosition);
335 | }
336 | });
337 | } else if (belowApi16) {
338 | view.animate().setListener(new AnimatorListener() {
339 | @Override public void onAnimationStart(android.animation.Animator animation) { }
340 | @Override
341 | public void onAnimationEnd(android.animation.Animator animation) {
342 | addThenAnimateAddedView(pos, itemToAdd, firstVisiblePosition);
343 | }
344 | @Override public void onAnimationCancel(android.animation.Animator animation) { }
345 | @Override public void onAnimationRepeat(android.animation.Animator animation) { }
346 | });
347 | } else {
348 | view.animate().withEndAction(new Runnable() { // position = current animating view pos in adapter
349 | public void run() {
350 | addThenAnimateAddedView(pos, itemToAdd, firstVisiblePosition);
351 | }
352 | });
353 | }
354 | }
355 |
356 |
357 | /** Convenience method to add a new view at first position of ListView
358 | */
359 | public void animateAddition(Object itemToAdd) {
360 | animateAddition(itemToAdd, 0);
361 | }
362 |
363 | /** When animating addition, we first animate all views which are after the adapter position
364 | * where the new view will be inserted down to make room. The new view is then added and animated
365 | * in. If the view added is not visible but above the visible items, all will animate down. If
366 | * the view is below all visible views, nothing will animate unless the items do not fill the
367 | * screen.
368 | * @param itemToAdd the object to add to the adapter
369 | * @param pos the position within the adapter to add the object
370 | */
371 | @SuppressLint("NewApi")
372 | public void animateAddition(final Object itemToAdd, final int pos) {
373 | mListView.setEnabled(false);
374 | mCallbacks.addButtonSetEnabledCallback(false);
375 | final int firstVisiblePosition = mListView.getFirstVisiblePosition();
376 | int lastVisiblePosition = mListView.getLastVisiblePosition();
377 | int childCount = mListView.getChildCount();
378 | if (pos > lastVisiblePosition) { // Do not animate unless once added, the new view is the new lastVisiblePos, in which case only animate inserted view
379 | mCallbacks.addAdapterItemCallback(pos, itemToAdd);
380 | final ViewTreeObserver observer = mListView.getViewTreeObserver();
381 | observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
382 | public boolean onPreDraw() {
383 | observer.removeOnPreDrawListener(this);
384 | if (pos == mListView.getLastVisiblePosition()) { // the added view is the new lastVisiblePos
385 | final View child = mListView.getChildAt(mListView.getChildCount() - 1); // inserted view
386 | setPreAnimationParameters(child, child.getWidth(), Axis.X);
387 | animateAxis(child, 0, Axis.X);
388 | afterAddition(child);
389 | } else {
390 | // No animating as item is not currently visible and below last item
391 | afterAllAdditionAnimations();
392 | }
393 | return true;
394 | }
395 | });
396 | } else { // Animate the already visible children to make way for new view, then animate insertion of new view
397 | boolean firstAnimation = true;
398 | mListView.setEnabled(false); // disable listView scrolling during animation
399 | for (int i = 0; i < childCount; i++) { // each visible view
400 | int position = firstVisiblePosition + i;
401 | final View child = mListView.getChildAt(i);
402 | // Animate down each visible view including and after the insertion position
403 | if (position >= pos) {
404 | animateAxis(child, child.getHeight() + mListView.getDividerHeight(), Axis.Y);
405 | if (firstAnimation) { // animate in the new child if visible
406 | afterViewsMadeWayForAddition(child, pos, itemToAdd, firstVisiblePosition);
407 | firstAnimation = false;
408 | }
409 | }
410 | }
411 | }
412 | }
413 |
414 | /**
415 | * This is called when the necessary views have made way for the new view, all that is
416 | * left to do now is add and animate the new view into the list (if visible), but we
417 | * also need to reset the translationY values as necessary to keep the final positions
418 | * correct.
419 | * @param pos the position within the adapter to add the object
420 | * @param itemToAdd the object to add to the adapter
421 | * @param firstVisiblePosition the position within the adapter of the first visible
422 | * position in the ListView
423 | */
424 | @SuppressLint("NewApi")
425 | private void addThenAnimateAddedView(final int pos, Object itemToAdd, int firstVisiblePosition) {
426 | mCallbacks.addAdapterItemCallback(pos, itemToAdd);
427 | /* reset Y values after they have been animated to make room for new view.
428 | * need to do all views indiscriminately because in older versions of Android
429 | * view recycling (after notifyDataSetChanged()) is unpredictable */
430 | for (int i = 0; i < mListView.getChildCount(); i++) {
431 | View v = mListView.getChildAt(i);
432 | setPreAnimationParameters(v, 0, Axis.Y);
433 | }
434 | final int firstPos = mListView.getFirstVisiblePosition();
435 | final int lastPos = mListView.getLastVisiblePosition();
436 | if (firstPos <= pos && pos <= lastPos) { // if added item is visible
437 | final ViewTreeObserver observer = mListView.getViewTreeObserver();
438 | observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
439 | public boolean onPreDraw() {
440 | observer.removeOnPreDrawListener(this);
441 | final int loc = pos - firstPos;
442 | final View child = mListView.getChildAt(loc); // inserted view
443 | setPreAnimationParameters(child, 0, Axis.Y);
444 | setPreAnimationParameters(child, child.getWidth(), Axis.X);
445 | animateAxis(child, 0, Axis.X);
446 | afterAddition(child);
447 | return true;
448 | }
449 | });
450 | } else if (pos < firstVisiblePosition) { // if added item is not visible and is above all visible items
451 | /* animate in child 0 from above after others have moved down. This is not the newly added item child.
452 | * This is a special case because unlike with removal, addition first animates, then adds and as a
453 | * result, views moved down do not include the first visible view, which must appear later after
454 | * adding.
455 | */
456 | final ViewTreeObserver observer = mListView.getViewTreeObserver();
457 | observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
458 | public boolean onPreDraw() {
459 | observer.removeOnPreDrawListener(this);
460 | final View child0 = mListView.getChildAt(0);
461 | setPreAnimationParameters(child0, -(child0.getHeight() + mListView.getDividerHeight()), Axis.Y);
462 | animateAxis(child0, 0, Axis.Y);
463 | afterAddition(child0);
464 | return true;
465 | }
466 | });
467 | } else { // the added item is below all visible items. No need to animate.
468 | afterAllAdditionAnimations();
469 | }
470 | }
471 |
472 | }
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.witheyjr.listviewanimator;
2 |
3 | import java.util.ArrayList;
4 | import android.support.v7.app.ActionBarActivity;
5 | import android.support.v4.app.Fragment;
6 | import android.content.Context;
7 | import android.content.Intent;
8 | import android.os.Bundle;
9 | import android.os.Handler;
10 | import android.util.Log;
11 | import android.view.Gravity;
12 | import android.view.LayoutInflater;
13 | import android.view.Menu;
14 | import android.view.MenuItem;
15 | import android.view.View;
16 | import android.view.ViewGroup;
17 | import android.widget.Button;
18 | import android.widget.ListView;
19 | import android.widget.PopupWindow;
20 | import android.widget.TextView;
21 | import android.widget.PopupWindow.OnDismissListener;
22 |
23 | public class MainActivity extends ActionBarActivity {
24 |
25 | private ListView mListView;
26 | // private StableArrayAdapter mAdapter;
27 | private StableWrapperArrayAdapter mAdapter;
28 | private ListViewAnimator mListViewAnimator;
29 | private SwipeDismissListViewTouchListener mTouchListener;
30 |
31 | private PopupWindow mUndoPopup;
32 | private TextView mUndoText;
33 | private Button mUndoButton;
34 |
35 | private float mDensity;
36 |
37 | // private String toUndoOrRemove;
38 | private ContentsWrapper toUndoOrRemove;
39 |
40 | private Boolean isRunning;
41 |
42 | private int adapterRemoveId;
43 |
44 | private MenuItem addButton;
45 |
46 | private int index;
47 |
48 | // private boolean currentlyAnimatingSwipe = false;
49 |
50 | private String[] eggs = { "Fried egg", "Poached egg", "Hard-boiled egg", "Soft-boiled egg",
51 | "Scrambled egg", "Large egg", "Medium egg", "Small egg", "Chicken egg", "Duck egg",
52 | "Goose egg", "Quail egg", "Coddled egg", "Shirred egg", "Basted egg", "Baked egg",
53 | "Eggs benedict", "Pickled egg", "Scotch egg", "Tea egg", "Omelette", "Good egg",
54 | "Baaaaad egg", "Caviar", "Ostrich egg", "Pheasant egg", "Emu egg", "Eggcellent",
55 | "Eggstraterrestrial", "Eggstravagant" };
56 |
57 | @Override
58 | protected void onCreate(Bundle savedInstanceState) {
59 | super.onCreate(savedInstanceState);
60 | setContentView(R.layout.activity_main);
61 | /*if (savedInstanceState == null) {
62 | getSupportFragmentManager().beginTransaction()
63 | .add(R.id.container, new PlaceholderFragment()).commit();
64 | }*/
65 |
66 | mListView = (ListView) findViewById(R.id.list);
67 | /*mAdapter = new ArrayAdapter(this,
68 | R.layout.eggsample_item,
69 | R.id.title,
70 | new ArrayList(Arrays.asList(eggs)));*/
71 | /*final ArrayList eggList = new ArrayList();
72 | for (int i = 0; i < eggs.length; ++i) {
73 | eggList.add(eggs[i]);
74 | }*/
75 | final ArrayList eggList = new ArrayList();
76 | for (int i = 0; i < eggs.length; ++i) {
77 | eggList.add(new ContentsWrapper(eggs[i]));
78 | }
79 | // mAdapter = new StableArrayAdapter(this, R.layout.eggsample_item, R.id.title, eggList);
80 | mAdapter = new StableWrapperArrayAdapter(this, R.layout.eggsample_item, R.id.title, eggList);
81 | mListView.setAdapter(mAdapter);
82 |
83 | mTouchListener = new SwipeDismissListViewTouchListener(
84 | mListView,
85 | new SwipeDismissListViewTouchListener.DismissCallbacks() {
86 | @Override
87 | public void onDismiss(ListView listView, View viewToRemove, int position) {
88 | // listView.setEnabled(false);
89 | mListViewAnimator.animateRemoval(listView, viewToRemove, position);
90 | }
91 | @Override
92 | public boolean canDismiss(int position) {
93 | mUndoPopup.dismiss(); // dismiss it if user touches away from popup
94 | // return mListView.isEnabled(); // prevent bugs from multiple swiping
95 | // return !listViewAnimator.listViewIsAnimating();
96 | return true;
97 | }
98 | @Override
99 | public boolean listViewIsAnimating() {
100 | return mListViewAnimator.listViewIsAnimating();
101 | }
102 | @Override
103 | public void currentlyAnimatingSwipe(boolean isAnimating) {
104 | // currentlyAnimatingSwipe = isAnimating;
105 | Log.d("onScrollStateChanged", "Setting addButton enabled(" + !isAnimating + ")");
106 | addButton.setEnabled(!isAnimating);
107 | }
108 | /*@Override
109 | public void currentlyAnimatingScroll(boolean isAnimating) {
110 | addButton.setEnabled(!isAnimating);
111 | }*/
112 | }, 0);
113 | mListView.setOnTouchListener(mTouchListener);
114 | mListView.setOnScrollListener(mTouchListener.makeScrollListener());
115 | mDensity = mListView.getResources().getDisplayMetrics().density;
116 |
117 | LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
118 |
119 | View undoPopupView = inflater.inflate(R.layout.undo_popup, null);
120 | mUndoButton = (Button)undoPopupView.findViewById(R.id.undo);
121 |
122 | mUndoText = (TextView)undoPopupView.findViewById(R.id.text);
123 | mUndoText.setText("");
124 |
125 | mUndoPopup = new PopupWindow(undoPopupView);
126 | mUndoPopup.setAnimationStyle(R.style.fade_animation);
127 |
128 | // Get screen width in dp and set width of popups respectively
129 | int xdensity = (int)(mListView.getContext().getResources().getDisplayMetrics().widthPixels / mDensity);
130 | if(xdensity < 300) {
131 | mUndoPopup.setWidth((int)(mDensity * 280));
132 | } else if(xdensity < 350) {
133 | mUndoPopup.setWidth((int)(mDensity * 300));
134 | } else if(xdensity < 500) {
135 | mUndoPopup.setWidth((int)(mDensity * 330));
136 | } else {
137 | mUndoPopup.setWidth((int)(mDensity * 450));
138 | }
139 | mUndoPopup.setHeight((int)(mDensity * 56));
140 | mUndoPopup.setOnDismissListener(new OnDismissListener() {
141 | @Override
142 | public void onDismiss() {
143 | // toUndoOrRemove = null;
144 | }
145 | });
146 | index = eggs.length - 1;
147 | }
148 |
149 | @Override
150 | protected void onResume() {
151 | super.onResume();
152 | isRunning = true;
153 | }
154 |
155 | @Override
156 | protected void onPause() {
157 | super.onPause();
158 | isRunning = false;
159 | try {
160 | mUndoPopup.dismiss();
161 | } catch (Exception e) {
162 | e.printStackTrace();
163 | }
164 | }
165 |
166 | public ListViewAnimator getListViewAnimator() {
167 | return mListViewAnimator;
168 | }
169 |
170 | @Override
171 | protected void onStart() {
172 | super.onStart();
173 |
174 | mUndoButton.setOnClickListener(new View.OnClickListener() {
175 | @Override
176 | public void onClick(View v) {
177 | mListViewAnimator.animateAddition(toUndoOrRemove, adapterRemoveId);
178 | mUndoPopup.dismiss();
179 | addButton.setEnabled(false);
180 | }
181 | });
182 |
183 | mListViewAnimator = new ListViewAnimator(new ListViewAnimator.Callbacks() {
184 | @Override
185 | public void undoCallback() {
186 | // String title = toUndoOrRemove;
187 | String title = toUndoOrRemove.getContents();
188 | mUndoText.setText("Removed '" + title + "'");
189 | if (isRunning) { // Check if isRunning in order to prevent rare crash if user swipes and exits app
190 | try {
191 | mUndoPopup.showAtLocation(mListView,
192 | Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM,
193 | 0, (int)(mDensity * 15));
194 | timeDismissUndoMessage();
195 | } catch (Exception e) {
196 | e.printStackTrace();
197 | }
198 | }
199 | }
200 | /*@Override
201 | public void deleteAdapterItemCallback(View viewToRemove) {
202 | int position = mListView.getPositionForView(viewToRemove);
203 | adapterRemoveId = position;
204 | toUndoOrRemove = mAdapter.getItem(position);
205 | mAdapter.remove(mAdapter.getItem(position));
206 | mAdapter.notifyDataSetChanged();
207 | }*/
208 | @Override
209 | public void deleteAdapterItemCallback(int position) {
210 | // int position = mListView.getPositionForView(viewToRemove);
211 | adapterRemoveId = position;
212 | toUndoOrRemove = mAdapter.getItem(position);
213 | mAdapter.remove(mAdapter.getItem(position));
214 | mAdapter.notifyDataSetChanged();
215 | }
216 | @Override
217 | public void addButtonSetEnabledCallback(boolean isEnabled) {
218 | addButton.setEnabled(isEnabled);
219 | }
220 | @Override
221 | public long getItemIdForAnimation(int position) {
222 | return mAdapter.getItemIdForAnimation(position);
223 | }
224 | @Override
225 | public void addAdapterItemCallback(int pos, Object itemToAdd) {
226 | // String toAdd = (String) itemToAdd;
227 | ContentsWrapper toAdd = (ContentsWrapper) itemToAdd;
228 | mAdapter.insert(toAdd, pos);
229 | // mAdapter.add(toAdd);
230 | // mAdapter.addItem(toAdd, pos);
231 | mAdapter.reIdMapObjects();
232 | mAdapter.notifyDataSetChanged();
233 | }
234 | }, mListView, mAdapter);
235 |
236 | }
237 |
238 | private Handler handler = new Handler();
239 | Runnable runnable = new Runnable() {
240 | @Override
241 | public void run() {
242 | try {
243 | mUndoPopup.dismiss();
244 | } catch (Exception e) {
245 | e.printStackTrace();
246 | }
247 | }
248 | };
249 |
250 | private void timeDismissUndoMessage() {
251 | handler.removeCallbacks(runnable);
252 | handler.postDelayed(runnable, 5000); // 5 second delay
253 | }
254 |
255 | @Override
256 | public boolean onCreateOptionsMenu(Menu menu) {
257 | // Inflate the menu; this adds items to the action bar if it is present.
258 | getMenuInflater().inflate(R.menu.main, menu);
259 | addButton = menu.findItem(R.id.add);
260 | addButton.setEnabled(true);
261 | return true;
262 | }
263 |
264 | @Override
265 | public boolean onOptionsItemSelected(MenuItem item) {
266 | // Handle action bar item clicks here. The action bar will
267 | // automatically handle clicks on the Home/Up button, so long
268 | // as you specify a parent activity in AndroidManifest.xml.
269 | switch (item.getItemId()) {
270 | case R.id.add:
271 | item.setEnabled(false);
272 | mListView.scrollBy(0, 0);
273 | mUndoPopup.dismiss();
274 | // listViewAnimator.animateAddition(eggs[index]);
275 | mListViewAnimator.animateAddition(new ContentsWrapper(eggs[index]));
276 | // index = index > eggs.length - 2 ? 0 : ++index;
277 | index = index == 0 ? eggs.length - 1 : --index;
278 | return true;
279 | /*case R.id.switch_activity:
280 | // Intent intent = new Intent(this, ImageActivity.class);
281 | // intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
282 | // intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
283 | // intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
284 | // intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
285 | // startActivity(intent);
286 |
287 | OldSwipeDismissListViewTouchListener mOldTouchListener =
288 | new OldSwipeDismissListViewTouchListener(
289 | mListView,
290 | new OldSwipeDismissListViewTouchListener.DismissCallbacks() {
291 | @Override
292 | public boolean canDismiss(int position) {
293 | return true;
294 | }
295 |
296 | @Override
297 | public void onDismiss(ListView listView, int[] reverseSortedPositions) {
298 | for (int position : reverseSortedPositions) {
299 | mAdapter.remove(mAdapter.getItem(position));
300 | }
301 | mAdapter.notifyDataSetChanged();
302 | }
303 | });
304 | mListView.setOnTouchListener(mOldTouchListener);
305 | mListView.setOnScrollListener(mOldTouchListener.makeScrollListener());
306 |
307 | break;*/
308 | default:
309 | break;
310 | }
311 | return super.onOptionsItemSelected(item);
312 | }
313 |
314 | /**
315 | * A placeholder fragment containing a simple view.
316 | */
317 | public static class PlaceholderFragment extends Fragment {
318 |
319 | public PlaceholderFragment() {
320 | }
321 |
322 | @Override
323 | public View onCreateView(LayoutInflater inflater, ViewGroup container,
324 | Bundle savedInstanceState) {
325 | View rootView = inflater.inflate(R.layout.fragment_main, container,
326 | false);
327 | return rootView;
328 | }
329 | }
330 |
331 | }
332 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/OldSwipeDismissListViewTouchListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2013 Google Inc.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.witheyjr.listviewanimator;
18 |
19 | import android.animation.Animator;
20 | import android.animation.AnimatorListenerAdapter;
21 | import android.animation.ValueAnimator;
22 | import android.annotation.SuppressLint;
23 | import android.graphics.Rect;
24 | import android.os.SystemClock;
25 | import android.view.MotionEvent;
26 | import android.view.VelocityTracker;
27 | import android.view.View;
28 | import android.view.ViewConfiguration;
29 | import android.view.ViewGroup;
30 | import android.view.ViewPropertyAnimator;
31 | import android.widget.AbsListView;
32 | import android.widget.ListView;
33 |
34 | import java.util.ArrayList;
35 | import java.util.Collections;
36 | import java.util.List;
37 |
38 | /**
39 | * A {@link View.OnTouchListener} that makes the list items in a {@link ListView}
40 | * dismissable. {@link ListView} is given special treatment because by default it handles touches
41 | * for its list items... i.e. it's in charge of drawing the pressed state (the list selector),
42 | * handling list item clicks, etc.
43 | *
44 | *
After creating the listener, the caller should also call
45 | * {@link ListView#setOnScrollListener(AbsListView.OnScrollListener)}, passing
46 | * in the scroll listener returned by {@link #makeScrollListener()}. If a scroll listener is
47 | * already assigned, the caller should still pass scroll changes through to this listener. This will
48 | * ensure that this {@link SwipeDismissListViewTouchListener} is paused during list view
49 | * scrolling.
This class Requires API level 12 or later due to use of {@link
70 | * ViewPropertyAnimator}.
71 | *
72 | *
For a generalized {@link View.OnTouchListener} that makes any view dismissable,
73 | * see {@link SwipeDismissTouchListener}.
74 | *
75 | * @see SwipeDismissTouchListener
76 | */
77 | @SuppressLint("NewApi")
78 | public class OldSwipeDismissListViewTouchListener implements View.OnTouchListener {
79 | // Cached ViewConfiguration and system-wide constant values
80 | private int mSlop;
81 | private int mMinFlingVelocity;
82 | private int mMaxFlingVelocity;
83 | private long mAnimationTime;
84 |
85 | // Fixed properties
86 | private ListView mListView;
87 | private DismissCallbacks mCallbacks;
88 | private int mViewWidth = 1; // 1 and not 0 to prevent dividing by zero
89 |
90 | // Transient properties
91 | private List mPendingDismisses = new ArrayList();
92 | private int mDismissAnimationRefCount = 0;
93 | private float mDownX;
94 | private float mDownY;
95 | private boolean mSwiping;
96 | private int mSwipingSlop;
97 | private VelocityTracker mVelocityTracker;
98 | private int mDownPosition;
99 | private View mDownView;
100 | private boolean mPaused;
101 |
102 | /**
103 | * The callback interface used by {@link SwipeDismissListViewTouchListener} to inform its client
104 | * about a successful dismissal of one or more list item positions.
105 | */
106 | public interface DismissCallbacks {
107 | /**
108 | * Called to determine whether the given position can be dismissed.
109 | */
110 | boolean canDismiss(int position);
111 |
112 | /**
113 | * Called when the user has indicated they she would like to dismiss one or more list item
114 | * positions.
115 | *
116 | * @param listView The originating {@link ListView}.
117 | * @param reverseSortedPositions An array of positions to dismiss, sorted in descending
118 | * order for convenience.
119 | */
120 | void onDismiss(ListView listView, int[] reverseSortedPositions);
121 | }
122 |
123 | /**
124 | * Constructs a new swipe-to-dismiss touch listener for the given list view.
125 | *
126 | * @param listView The list view whose items should be dismissable.
127 | * @param callbacks The callback to trigger when the user has indicated that she would like to
128 | * dismiss one or more list items.
129 | */
130 | public OldSwipeDismissListViewTouchListener(ListView listView, DismissCallbacks callbacks) {
131 | ViewConfiguration vc = ViewConfiguration.get(listView.getContext());
132 | mSlop = vc.getScaledTouchSlop();
133 | mMinFlingVelocity = vc.getScaledMinimumFlingVelocity() * 16;
134 | mMaxFlingVelocity = vc.getScaledMaximumFlingVelocity();
135 | mAnimationTime = listView.getContext().getResources().getInteger(
136 | android.R.integer.config_mediumAnimTime);
137 | mListView = listView;
138 | mCallbacks = callbacks;
139 | }
140 |
141 | /**
142 | * Enables or disables (pauses or resumes) watching for swipe-to-dismiss gestures.
143 | *
144 | * @param enabled Whether or not to watch for gestures.
145 | */
146 | public void setEnabled(boolean enabled) {
147 | mPaused = !enabled;
148 | }
149 |
150 | /**
151 | * Returns an {@link AbsListView.OnScrollListener} to be added to the {@link
152 | * ListView} using {@link ListView#setOnScrollListener(AbsListView.OnScrollListener)}.
153 | * If a scroll listener is already assigned, the caller should still pass scroll changes through
154 | * to this listener. This will ensure that this {@link SwipeDismissListViewTouchListener} is
155 | * paused during list view scrolling.
156 | *
157 | * @see SwipeDismissListViewTouchListener
158 | */
159 | public AbsListView.OnScrollListener makeScrollListener() {
160 | return new AbsListView.OnScrollListener() {
161 | @Override
162 | public void onScrollStateChanged(AbsListView absListView, int scrollState) {
163 | setEnabled(scrollState != AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
164 | }
165 |
166 | @Override
167 | public void onScroll(AbsListView absListView, int i, int i1, int i2) {
168 | }
169 | };
170 | }
171 |
172 | @Override
173 | public boolean onTouch(View view, MotionEvent motionEvent) {
174 | if (mViewWidth < 2) {
175 | mViewWidth = mListView.getWidth();
176 | }
177 |
178 | switch (motionEvent.getActionMasked()) {
179 | case MotionEvent.ACTION_DOWN: {
180 | if (mPaused) {
181 | return false;
182 | }
183 |
184 | // TODO: ensure this is a finger, and set a flag
185 |
186 | // Find the child view that was touched (perform a hit test)
187 | Rect rect = new Rect();
188 | int childCount = mListView.getChildCount();
189 | int[] listViewCoords = new int[2];
190 | mListView.getLocationOnScreen(listViewCoords);
191 | int x = (int) motionEvent.getRawX() - listViewCoords[0];
192 | int y = (int) motionEvent.getRawY() - listViewCoords[1];
193 | View child;
194 | for (int i = 0; i < childCount; i++) {
195 | child = mListView.getChildAt(i);
196 | child.getHitRect(rect);
197 | if (rect.contains(x, y)) {
198 | mDownView = child;
199 | break;
200 | }
201 | }
202 |
203 | if (mDownView != null) {
204 | mDownX = motionEvent.getRawX();
205 | mDownY = motionEvent.getRawY();
206 | mDownPosition = mListView.getPositionForView(mDownView);
207 | if (mCallbacks.canDismiss(mDownPosition)) {
208 | mVelocityTracker = VelocityTracker.obtain();
209 | mVelocityTracker.addMovement(motionEvent);
210 | } else {
211 | mDownView = null;
212 | }
213 | }
214 | return false;
215 | }
216 |
217 | case MotionEvent.ACTION_CANCEL: {
218 | if (mVelocityTracker == null) {
219 | break;
220 | }
221 |
222 | if (mDownView != null && mSwiping) {
223 | // cancel
224 | mDownView.animate()
225 | .translationX(0)
226 | .alpha(1)
227 | .setDuration(mAnimationTime)
228 | .setListener(null);
229 | }
230 | mVelocityTracker.recycle();
231 | mVelocityTracker = null;
232 | mDownX = 0;
233 | mDownY = 0;
234 | mDownView = null;
235 | mDownPosition = ListView.INVALID_POSITION;
236 | mSwiping = false;
237 | break;
238 | }
239 |
240 | case MotionEvent.ACTION_UP: {
241 | if (mVelocityTracker == null) {
242 | break;
243 | }
244 |
245 | float deltaX = motionEvent.getRawX() - mDownX;
246 | mVelocityTracker.addMovement(motionEvent);
247 | mVelocityTracker.computeCurrentVelocity(1000);
248 | float velocityX = mVelocityTracker.getXVelocity();
249 | float absVelocityX = Math.abs(velocityX);
250 | float absVelocityY = Math.abs(mVelocityTracker.getYVelocity());
251 | boolean dismiss = false;
252 | boolean dismissRight = false;
253 | if (Math.abs(deltaX) > mViewWidth / 2 && mSwiping) {
254 | dismiss = true;
255 | dismissRight = deltaX > 0;
256 | } else if (mMinFlingVelocity <= absVelocityX && absVelocityX <= mMaxFlingVelocity
257 | && absVelocityY < absVelocityX && mSwiping) {
258 | // dismiss only if flinging in the same direction as dragging
259 | dismiss = (velocityX < 0) == (deltaX < 0);
260 | dismissRight = mVelocityTracker.getXVelocity() > 0;
261 | }
262 | if (dismiss && mDownPosition != ListView.INVALID_POSITION) {
263 | // dismiss
264 | final View downView = mDownView; // mDownView gets null'd before animation ends
265 | final int downPosition = mDownPosition;
266 | ++mDismissAnimationRefCount;
267 | mDownView.animate()
268 | .translationX(dismissRight ? mViewWidth : -mViewWidth)
269 | .alpha(0)
270 | .setDuration(mAnimationTime)
271 | .setListener(new AnimatorListenerAdapter() {
272 | @Override
273 | public void onAnimationEnd(Animator animation) {
274 | performDismiss(downView, downPosition);
275 | }
276 | });
277 | } else {
278 | // cancel
279 | mDownView.animate()
280 | .translationX(0)
281 | .alpha(1)
282 | .setDuration(mAnimationTime)
283 | .setListener(null);
284 | }
285 | mVelocityTracker.recycle();
286 | mVelocityTracker = null;
287 | mDownX = 0;
288 | mDownY = 0;
289 | mDownView = null;
290 | mDownPosition = ListView.INVALID_POSITION;
291 | mSwiping = false;
292 | break;
293 | }
294 |
295 | case MotionEvent.ACTION_MOVE: {
296 | if (mVelocityTracker == null || mPaused) {
297 | break;
298 | }
299 |
300 | mVelocityTracker.addMovement(motionEvent);
301 | float deltaX = motionEvent.getRawX() - mDownX;
302 | float deltaY = motionEvent.getRawY() - mDownY;
303 | if (Math.abs(deltaX) > mSlop && Math.abs(deltaY) < Math.abs(deltaX) / 2) {
304 | mSwiping = true;
305 | mSwipingSlop = (deltaX > 0 ? mSlop : -mSlop);
306 | mListView.requestDisallowInterceptTouchEvent(true);
307 |
308 | // Cancel ListView's touch (un-highlighting the item)
309 | MotionEvent cancelEvent = MotionEvent.obtain(motionEvent);
310 | cancelEvent.setAction(MotionEvent.ACTION_CANCEL |
311 | (motionEvent.getActionIndex()
312 | << MotionEvent.ACTION_POINTER_INDEX_SHIFT));
313 | mListView.onTouchEvent(cancelEvent);
314 | cancelEvent.recycle();
315 | }
316 |
317 | if (mSwiping) {
318 | mDownView.setTranslationX(deltaX - mSwipingSlop);
319 | mDownView.setAlpha(Math.max(0f, Math.min(1f,
320 | 1f - 2f * Math.abs(deltaX) / mViewWidth)));
321 | return true;
322 | }
323 | break;
324 | }
325 | }
326 | return false;
327 | }
328 |
329 | class PendingDismissData implements Comparable {
330 | public int position;
331 | public View view;
332 |
333 | public PendingDismissData(int position, View view) {
334 | this.position = position;
335 | this.view = view;
336 | }
337 |
338 | @Override
339 | public int compareTo(PendingDismissData other) {
340 | // Sort by descending position
341 | return other.position - position;
342 | }
343 | }
344 |
345 | private void performDismiss(final View dismissView, final int dismissPosition) {
346 | // Animate the dismissed list item to zero-height and fire the dismiss callback when
347 | // all dismissed list item animations have completed. This triggers layout on each animation
348 | // frame; in the future we may want to do something smarter and more performant.
349 |
350 | final ViewGroup.LayoutParams lp = dismissView.getLayoutParams();
351 | final int originalHeight = dismissView.getHeight();
352 |
353 | ValueAnimator animator = ValueAnimator.ofInt(originalHeight, 1).setDuration(mAnimationTime);
354 |
355 | animator.addListener(new AnimatorListenerAdapter() {
356 | @Override
357 | public void onAnimationEnd(Animator animation) {
358 | --mDismissAnimationRefCount;
359 | if (mDismissAnimationRefCount == 0) {
360 | // No active animations, process all pending dismisses.
361 | // Sort by descending position
362 | Collections.sort(mPendingDismisses);
363 |
364 | int[] dismissPositions = new int[mPendingDismisses.size()];
365 | for (int i = mPendingDismisses.size() - 1; i >= 0; i--) {
366 | dismissPositions[i] = mPendingDismisses.get(i).position;
367 | }
368 | mCallbacks.onDismiss(mListView, dismissPositions);
369 |
370 | // Reset mDownPosition to avoid MotionEvent.ACTION_UP trying to start a dismiss
371 | // animation with a stale position
372 | mDownPosition = ListView.INVALID_POSITION;
373 |
374 | ViewGroup.LayoutParams lp;
375 | for (PendingDismissData pendingDismiss : mPendingDismisses) {
376 | // Reset view presentation
377 | pendingDismiss.view.setAlpha(1f);
378 | pendingDismiss.view.setTranslationX(0);
379 | lp = pendingDismiss.view.getLayoutParams();
380 | lp.height = originalHeight;
381 | pendingDismiss.view.setLayoutParams(lp);
382 | }
383 |
384 | // Send a cancel event
385 | long time = SystemClock.uptimeMillis();
386 | MotionEvent cancelEvent = MotionEvent.obtain(time, time,
387 | MotionEvent.ACTION_CANCEL, 0, 0, 0);
388 | mListView.dispatchTouchEvent(cancelEvent);
389 |
390 | mPendingDismisses.clear();
391 | }
392 | }
393 | });
394 |
395 | animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
396 | @Override
397 | public void onAnimationUpdate(ValueAnimator valueAnimator) {
398 | lp.height = (Integer) valueAnimator.getAnimatedValue();
399 | dismissView.setLayoutParams(lp);
400 | }
401 | });
402 |
403 | mPendingDismisses.add(new PendingDismissData(dismissPosition, dismissView));
404 | animator.start();
405 | }
406 | }
407 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/StableArrayAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 The Android Open Source Project
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.witheyjr.listviewanimator;
18 |
19 | import java.util.ArrayList;
20 | import java.util.HashMap;
21 | import java.util.List;
22 | import android.content.Context;
23 | import android.view.LayoutInflater;
24 | import android.view.View;
25 | import android.view.ViewGroup;
26 | import android.widget.ArrayAdapter;
27 | import android.widget.TextView;
28 |
29 | public class StableArrayAdapter extends ArrayAdapter {
30 |
31 | HashMap mIdMap = new HashMap();
32 |
33 | List objects = new ArrayList();
34 | MainActivity mainActivity;
35 | Context context;
36 | int layoutResourceId;
37 |
38 | public StableArrayAdapter(Context context, int layoutResourceId, int textViewResourceId,
39 | List origObjects) {
40 | // super(context, textViewResourceId, objects);
41 | super(context, layoutResourceId, textViewResourceId, origObjects);
42 | this.objects = origObjects;
43 | for (int i = 0; i < objects.size(); ++i) {
44 | // objects.add(origObjects.get(i));
45 | mIdMap.put(objects.get(i), i);
46 | }
47 | this.context = context;
48 | this.layoutResourceId = layoutResourceId;
49 | }
50 |
51 | /*public void addItem(String toAdd, int pos) {
52 | objects.add(pos, toAdd);
53 | }*/
54 |
55 | public long getItemIdForAnimation(int position) {
56 | // String item = getItem(position);
57 | return mIdMap.get(objects.get(position));
58 | }
59 |
60 | @Override
61 | public boolean hasStableIds() {
62 | return true;
63 | }
64 |
65 | /* this is necessary for correct animations after new views/items have been added
66 | * to the ListView.
67 | */
68 | public void reIdMapObjects() {
69 | mIdMap.clear();
70 | for (int i = 0; i < objects.size(); i++) {
71 | mIdMap.put(objects.get(i), i);
72 | }
73 | }
74 |
75 | /*@Override
76 | public int getCount() {
77 | return objects.size();
78 | }
79 |
80 | @Override
81 | public String getItem(int position) {
82 | return objects.get(position);
83 | }*/
84 |
85 | @Override
86 | public long getItemId(int position) {
87 | // return position;
88 | return mIdMap.get(position);
89 | }
90 |
91 | /*@Override
92 | public int getPosition(String item) {
93 | return super.getPosition(item);
94 | }*/
95 |
96 | @Override
97 | public View getView(int position, View convertView, ViewGroup parent) {
98 |
99 | if (null == convertView)
100 | convertView = LayoutInflater.from(context).inflate(layoutResourceId, null);
101 | TextView title = (TextView) convertView.findViewById(R.id.title);
102 | title.setText(objects.get(position));
103 | // View view = super.getView(position, convertView, parent);
104 | /*if (view != convertView) {
105 | // Add touch listener to every new view to track swipe motion
106 | }*/
107 | return convertView;
108 | }
109 |
110 | }
111 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/StableWrapperArrayAdapter.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2014 J Withey
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | package com.witheyjr.listviewanimator;
18 |
19 | import java.lang.ref.WeakReference;
20 | import java.util.ArrayList;
21 | import java.util.HashMap;
22 | import java.util.List;
23 |
24 | import static com.nineoldandroids.view.ViewPropertyAnimator.animate;
25 | import static com.nineoldandroids.view.ViewHelper.setAlpha;
26 |
27 | import android.annotation.SuppressLint;
28 | import android.content.Context;
29 | import android.graphics.Bitmap;
30 | import android.graphics.BitmapFactory;
31 | import android.graphics.Color;
32 | import android.graphics.drawable.ColorDrawable;
33 | import android.graphics.drawable.Drawable;
34 | import android.os.AsyncTask;
35 | import android.os.Build;
36 | import android.support.v4.util.LruCache;
37 | import android.view.LayoutInflater;
38 | import android.view.View;
39 | import android.view.ViewGroup;
40 | import android.widget.ArrayAdapter;
41 | import android.widget.ImageView;
42 | import android.widget.TextView;
43 |
44 | /**
45 | * @author J Withey
46 | * StableWrapperArrayAdapter makes some tweaks to a bog-standard adapter to make it compatible with
47 | * the {@link ListViewAnimator}. Specifically, the {@link getItemIdForAnimation()} and related {@link mIdMap} are necessary
48 | * to keep track of the correct items for animating, and just prior to notifyDataSetChanged(), the
49 | * mIdMap should be updated with the method {@link reIdMapObjects}.
50 | *
51 | * Based on open source code by the DevBytes team:
52 | * http://graphics-geek.blogspot.co.uk/2013/06/devbytes-animating-listview-deletion.html
53 | */
54 | public class StableWrapperArrayAdapter extends ArrayAdapter {
55 |
56 | private HashMap mIdMap = new HashMap();
57 | private List mObjects = new ArrayList();
58 | private Context mContext;
59 | private int mLayoutResourceId;
60 | private boolean withImage = false;
61 | private final int mDuration = 100;
62 | private LruCache mMemoryCache;
63 |
64 | public StableWrapperArrayAdapter(Context context, int layoutResourceId,
65 | List origObjects) {
66 | super(context, layoutResourceId, origObjects);
67 | this.mObjects = origObjects;
68 | for (int i = 0; i < mObjects.size(); ++i) {
69 | mIdMap.put(mObjects.get(i), i);
70 | }
71 | this.mContext = context;
72 | this.mLayoutResourceId = layoutResourceId;
73 | withImage = true;
74 | /* Get max available VM memory, exceeding this amount will throw an OutOfMemory exception.
75 | * Stored in kilobytes as LruCache takes an int in its constructor.*/
76 | final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
77 | // Use 1/4 of the available memory for this memory cache.
78 | final int cacheSize = maxMemory / 4;
79 | mMemoryCache = new LruCache(cacheSize) {
80 | @SuppressLint("NewApi")
81 | @Override
82 | protected int sizeOf(String key, Bitmap bitmap) {
83 | // The cache size will be measured in kilobytes rather than number of items. Also, I love fragmentation.
84 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
85 | return (bitmap.getRowBytes() * bitmap.getHeight()) / 1024;
86 | } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
87 | return bitmap.getByteCount() / 1024;
88 | } else {
89 | return bitmap.getAllocationByteCount() / 1024;
90 | }
91 | }
92 | };
93 | }
94 |
95 | /** This is necessary for the correct items to be animated by the ListViewAnimator.
96 | * Cannot simply override getItemId() as this is used elsewhere.
97 | */
98 | public long getItemIdForAnimation(int position) {
99 | return mIdMap.get(mObjects.get(position));
100 | }
101 |
102 | @Override
103 | public boolean hasStableIds() {
104 | return true;
105 | }
106 |
107 | /** This is necessary for correct animations after new views/items have been added
108 | * to the ListView. To be called just prior to notifyDataSetChanged().
109 | */
110 | public void reIdMapObjects() {
111 | mIdMap.clear();
112 | for (int i = 0; i < mObjects.size(); i++) {
113 | mIdMap.put(mObjects.get(i), i);
114 | }
115 | }
116 |
117 | @Override
118 | public long getItemId(int position) {
119 | return position;
120 | }
121 |
122 | @Override
123 | public View getView(int position, View convertView, ViewGroup parent) {
124 | if (null == convertView)
125 | convertView = LayoutInflater.from(mContext).inflate(mLayoutResourceId, null);
126 | TextView title = (TextView) convertView.findViewById(R.id.title);
127 | title.setText(mObjects.get(position).getContents());
128 | if (withImage) {
129 | ImageView mImageView = (ImageView) convertView.findViewById(R.id.image);
130 | int resId = mObjects.get(position).getImageResource();
131 | final String imageKey = String.valueOf(resId);
132 | final Bitmap bitmap = getBitmapFromMemCache(imageKey);
133 | if (bitmap != null) {
134 | mImageView.setImageBitmap(bitmap);
135 | } else if (cancelPotentialLoad(mObjects.get(position).getImageResource(), mImageView)) {
136 | ImageLoaderTask task = new ImageLoaderTask(mImageView);
137 | LoadedDrawable loadedDrawable = new LoadedDrawable(task);
138 | mImageView.setImageDrawable(loadedDrawable);
139 | task.execute(mObjects.get(position).getImageResource());
140 | }
141 | }
142 | return convertView;
143 | }
144 |
145 | /* ########################################################################################
146 | * # The following are all methods to efficiently load and cache images, and not relevant #
147 | * # to the workings of the ListViewAnimator. #
148 | * ########################################################################################
149 | */
150 |
151 | private void addBitmapToMemoryCache(String key, Bitmap bitmap) {
152 | if (getBitmapFromMemCache(key) == null) {
153 | mMemoryCache.put(key, bitmap);
154 | }
155 | }
156 |
157 | private Bitmap getBitmapFromMemCache(String key) {
158 | return mMemoryCache.get(key);
159 | }
160 |
161 | private static boolean cancelPotentialLoad(int id, ImageView imageView) {
162 | ImageLoaderTask imageLoaderTask = getImageLoaderTask(imageView);
163 | if (imageLoaderTask != null) {
164 | int bitmapId = imageLoaderTask.id;
165 | if ((bitmapId == 0) || (bitmapId != id)) {
166 | imageLoaderTask.cancel(true);
167 | } else {
168 | // The same id is already being loaded.
169 | return false;
170 | }
171 | }
172 | return true;
173 | }
174 |
175 | private static ImageLoaderTask getImageLoaderTask(ImageView imageView) {
176 | if (imageView != null) {
177 | Drawable drawable = imageView.getDrawable();
178 | if (drawable instanceof LoadedDrawable) {
179 | LoadedDrawable downloadedDrawable = (LoadedDrawable)drawable;
180 | return downloadedDrawable.getImageLoaderTask();
181 | }
182 | }
183 | return null;
184 | }
185 |
186 | private class ImageLoaderTask extends AsyncTask {
187 | private int id;
188 | private final WeakReference imageViewReference;
189 | private ImageLoaderTask(ImageView image) {
190 | this.imageViewReference = new WeakReference(image);
191 | }
192 |
193 | @Override
194 | protected Bitmap doInBackground(Integer... params) {
195 | Bitmap bitmap = null;
196 | bitmap = BitmapFactory.decodeResource(mContext.getResources(), params[0]);
197 | addBitmapToMemoryCache(String.valueOf(params[0]), bitmap);
198 | return bitmap;
199 | }
200 |
201 | @SuppressLint("NewApi")
202 | @SuppressWarnings("deprecation")
203 | @Override
204 | protected void onPostExecute(Bitmap result) {
205 | if (isCancelled()) {
206 | result = null;
207 | }
208 | if (imageViewReference != null) {
209 | ImageView imageView = imageViewReference.get();
210 | ImageLoaderTask imageLoaderTask = getImageLoaderTask(imageView);
211 | if (this == imageLoaderTask) {
212 | imageView.setImageBitmap(result);
213 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
214 | setAlpha(imageView, 0);
215 | animate(imageView)
216 | .alpha(1)
217 | .setDuration(mDuration);
218 | } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
219 | imageView.setAlpha(0);
220 | imageView.animate()
221 | .alpha(1)
222 | .setDuration(mDuration);
223 | } else {
224 | // Have to cast ImageView to View for animating for some reason
225 | View dummy = (View) imageView;
226 | dummy.setAlpha(0);
227 | dummy.animate()
228 | .alpha(1)
229 | .setDuration(mDuration);
230 | }
231 | }
232 | }
233 | }
234 | }
235 |
236 | private static class LoadedDrawable extends ColorDrawable {
237 | private final WeakReference imageLoaderTaskReference;
238 | public LoadedDrawable(ImageLoaderTask imageLoaderTask) {
239 | super(Color.WHITE);
240 | imageLoaderTaskReference = new WeakReference(imageLoaderTask);
241 | }
242 | public ImageLoaderTask getImageLoaderTask() {
243 | return imageLoaderTaskReference.get();
244 | }
245 | }
246 | }
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
--------------------------------------------------------------------------------
/src/com/witheyjr/listviewanimator/SwipeDismissListViewTouchListener.java:
--------------------------------------------------------------------------------
1 | /*
2 | * ******************************************************************************
3 | * Copyright (c) 2014 J Withey.
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | * *****************************************************************************
17 | */
18 |
19 | package com.witheyjr.listviewanimator;
20 |
21 | import static com.nineoldandroids.view.ViewHelper.setAlpha;
22 | import static com.nineoldandroids.view.ViewHelper.setRotation;
23 | import static com.nineoldandroids.view.ViewHelper.setScaleX;
24 | import static com.nineoldandroids.view.ViewHelper.setScaleY;
25 | import static com.nineoldandroids.view.ViewHelper.setTranslationX;
26 | import static com.nineoldandroids.view.ViewPropertyAnimator.animate;
27 |
28 | import android.animation.Animator;
29 | import android.animation.Animator.AnimatorListener;
30 | import android.annotation.SuppressLint;
31 | import android.graphics.Rect;
32 | import android.os.Build;
33 | import android.view.MotionEvent;
34 | import android.view.VelocityTracker;
35 | import android.view.View;
36 | import android.view.ViewConfiguration;
37 | import android.view.animation.LinearInterpolator;
38 | import android.view.animation.OvershootInterpolator;
39 | import android.widget.AbsListView;
40 | import android.widget.ListView;
41 | import com.nineoldandroids.animation.AnimatorListenerAdapter;
42 |
43 | /**
44 | * This is based on code by Roman Nurik.
45 | * See this link for original code https://github.com/romannurik/Android-SwipeToDismiss
46 | *
47 | *
48 | * A {@link View.OnTouchListener} that makes the list items in a {@link ListView}
49 | * dismissable. {@link ListView} is given special treatment because by default it handles touches
50 | * for its list items... i.e. it's in charge of drawing the pressed state (the list selector),
51 | * handling list item clicks, etc.
52 | *
53 | *
After creating the listener, the caller should also call
54 | * {@link ListView#setOnScrollListener(AbsListView.OnScrollListener)}, passing
55 | * in the scroll listener returned by {@link #makeScrollListener()}. If a scroll listener is
56 | * already assigned, the caller should still pass scroll changes through to this listener. This will
57 | * ensure that this {@link SwipeDismissListViewTouchListener} is paused during list view
58 | * scrolling.