diff --git a/.gitignore b/.gitignore index c6cbe56..31f01ae 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ .DS_Store /build /captures +.idea diff --git a/.idea/.name b/.idea/.name index acb47eb..15a0b40 100644 --- a/.idea/.name +++ b/.idea/.name @@ -1 +1 @@ -SnapRecycler \ No newline at end of file +SnapListUtil \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index c4a7df2..8b7d771 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/java/za/co/retrorabbit/snaprecycler/MainActivity.java b/app/src/main/java/za/co/retrorabbit/snaprecycler/MainActivity.java index 82b4815..0f26d4d 100644 --- a/app/src/main/java/za/co/retrorabbit/snaprecycler/MainActivity.java +++ b/app/src/main/java/za/co/retrorabbit/snaprecycler/MainActivity.java @@ -9,6 +9,8 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.ListAdapter; +import android.widget.ListView; import java.util.ArrayList; import java.util.List; @@ -19,6 +21,8 @@ public class MainActivity extends AppCompatActivity { RecyclerView recyclerView; private RecyclerView.Adapter adapter; + private ListView listview; + private ListAdapter adapterList; @Override protected void onCreate(Bundle savedInstanceState) { @@ -30,10 +34,17 @@ protected void onCreate(Bundle savedInstanceState) { recyclerView = (RecyclerView) findViewById(R.id.recyclerView); if (recyclerView != null) { recyclerView.setHasFixedSize(true); - recyclerView.setAdapter(getAdapter()); + recyclerView.setAdapter(getAdapterRecycler()); recyclerView.getAdapter().notifyDataSetChanged(); SnapListUtil.addSnapLayoutManager(recyclerView, SnapListUtil.LayoutManagerType.LINEAR, RecyclerView.VERTICAL, false); } + + listview = (ListView) findViewById(R.id.listview); + if (listview != null) { + listview.setAdapter(getAdapterList()); + SnapListUtil.addSnapLayoutManager(listview, SnapListUtil.LayoutManagerType.LINEAR, RecyclerView.VERTICAL, false); + } + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); if (fab != null) fab.setOnClickListener(new View.OnClickListener() { @@ -67,7 +78,7 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } - public ThingRecyclerAdapter getAdapter() { + public ThingRecyclerAdapter getAdapterRecycler() { return new ThingRecyclerAdapter(getThings()); } @@ -78,4 +89,8 @@ public static List getThings() { } return list; } + + public ListAdapter getAdapterList() { + return new ThingListAdapter(this,R.layout.list_item,getThings()); + } } diff --git a/app/src/main/java/za/co/retrorabbit/snaprecycler/ThingListAdapter.java b/app/src/main/java/za/co/retrorabbit/snaprecycler/ThingListAdapter.java new file mode 100644 index 0000000..d19ef7f --- /dev/null +++ b/app/src/main/java/za/co/retrorabbit/snaprecycler/ThingListAdapter.java @@ -0,0 +1,71 @@ +package za.co.retrorabbit.snaprecycler; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.HashMap; +import java.util.List; + +/** + * Created by wsche on 2016/06/03. + */ +public class ThingListAdapter extends ArrayAdapter { + HashMap mIdMap = new HashMap(); + + public ThingListAdapter(Context context, int textViewResourceId, + List objects) { + super(context, textViewResourceId, objects); + for (int i = 0; i < objects.size(); ++i) { + mIdMap.put(objects.get(i), i); + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ThingViewHolder holder; + if (convertView == null) { + holder = new ThingViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null, false)); + convertView = holder.itemView; + convertView.setTag(holder); + } else { + holder = (ThingViewHolder) convertView.getTag(); + convertView = holder.itemView; + } + holder.populate(getItem(position)); + return convertView; + } + + @Override + public long getItemId(int position) { + Thing item = getItem(position); + return mIdMap.get(item); + } + + @Override + public boolean hasStableIds() { + return true; + } + + public class ThingViewHolder { + + ImageView imageView; + TextView titleTextView; + public View itemView; + + public ThingViewHolder(View itemView) { + this.itemView = itemView; + imageView = (ImageView) itemView.findViewById(R.id.imageview); + titleTextView = (TextView) itemView.findViewById(R.id.textview); + } + + public void populate(Thing item) { + imageView.setImageResource(item.imageResource); + titleTextView.setText(item.text); + } + } +} diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 9ff3b90..a940ddb 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -4,14 +4,22 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="@color/colorAccent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="za.co.retrorabbit.snaprecycler.MainActivity" - android:background="@color/colorAccent" tools:showIn="@layout/activity_main"> + + diff --git a/snaplistutil/build.gradle b/snaplistutil/build.gradle index 5f2dbc5..ffbd872 100644 --- a/snaplistutil/build.gradle +++ b/snaplistutil/build.gradle @@ -14,7 +14,7 @@ android { buildToolsVersion "23.0.3" defaultConfig { - minSdkVersion 7 + minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName "0.0.1" diff --git a/snaplistutil/src/main/java/za/co/retrorabbit/snaplistutil/SnapListUtil.java b/snaplistutil/src/main/java/za/co/retrorabbit/snaplistutil/SnapListUtil.java index 4bb76d8..13f97b8 100644 --- a/snaplistutil/src/main/java/za/co/retrorabbit/snaplistutil/SnapListUtil.java +++ b/snaplistutil/src/main/java/za/co/retrorabbit/snaplistutil/SnapListUtil.java @@ -6,6 +6,8 @@ import android.support.v7.widget.LinearSmoothScroller; import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; +import android.widget.AbsListView; +import android.widget.ListView; /** * Created by wsche on 2016/06/03. @@ -79,6 +81,56 @@ public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } } + public static void addSnapLayoutManager(ListView listView, LayoutManagerType layoutManagerType, int orientation, boolean reversed) { + switch (layoutManagerType) { + case LINEAR: + listView.setOnScrollListener(new ListView.OnScrollListener() { + Direction direction = Direction.DOWN; + private int mLastFirstVisibleItem = 0; + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + switch (scrollState) { + case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: + case AbsListView.OnScrollListener.SCROLL_STATE_FLING: + // ((SmoothLinearLayoutManager) recyclerView.getLayoutManager()).setMPI(25f); + break; + case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: + + //layoutManager.setMPI(150f); + //if (layoutManager.findFirstCompletelyVisibleItemPosition() != layoutManager.findFirstVisibleItemPosition()) { + + switch (direction) { + case DOWN: + view.smoothScrollToPosition(view.getLastVisiblePosition()); + break; + case UP: + view.smoothScrollToPosition(view.getFirstVisiblePosition()); + break; + } + //} + break; + } + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + if (mLastFirstVisibleItem < firstVisibleItem) { + // Recycle view scrolling down... + direction = Direction.DOWN; + } + if (mLastFirstVisibleItem > firstVisibleItem) { + // Recycle view scrolling up... + direction = Direction.UP; + } + mLastFirstVisibleItem = firstVisibleItem; + } + + }); + break; + } + } + private enum Direction { UP, DOWN