From 02ff5ecc9763c52e63223fcc38c9ab557fb492d4 Mon Sep 17 00:00:00 2001 From: ScorpioMiku <1056992492@qq.com> Date: Sun, 2 Sep 2018 14:49:34 +0800 Subject: [PATCH] cardview --- app/build.gradle | 3 + .../nutritionmaster/adapter/CardAdapter.java | 50 +++++++++++- .../nutritionmaster/adapter/CardHolder.java | 25 ++++++ .../adapter/HomePagerAdapter.java | 4 +- .../cardconfig/CardConfig.java | 2 +- .../cardconfig/CardItemTouchCallBack.java | 46 +++++------ .../cardconfig/SwipeCardLayoutManager.java | 6 +- .../customization/CustomizationFragment.java | 76 +++++++++++++++++-- app/src/main/res/layout/card_item.xml | 48 +++++++++++- app/src/main/res/layout/customization.xml | 15 ++-- app/src/main/res/values/arrays.xml | 2 +- 11 files changed, 231 insertions(+), 46 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6350ac4..854f0e8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,4 +63,7 @@ dependencies { compile 'com.miguelcatalan:materialsearchview:1.4.0' //floatbuttom compile 'com.nightonke:boommenu:2.1.1' + //recycler and card + implementation 'com.android.support:recyclerview-v7:26.1.0' + implementation 'com.android.support:cardview-v7:26.1.0' } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardAdapter.java index d240ed5..7c8e4dd 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardAdapter.java @@ -1,10 +1,58 @@ package com.example.ninefourone.nutritionmaster.adapter; +import android.content.Context; import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.ninefourone.nutritionmaster.R; +import com.orhanobut.logger.Logger; + +import java.util.ArrayList; /** * Created by ScorpioMiku on 2018/9/2. */ -public class CardAdapter extends RecyclerView.Adapter { +public class CardAdapter extends RecyclerView.Adapter { + private Context context; + private ArrayList mList; + + public CardAdapter(Context context, ArrayList mList) { + this.context = context; + this.mList = mList; + } + + + @Override + public CardHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.card_item, parent, false); + CardHolder cardHolder = new CardHolder(view); + return cardHolder; + } + + @Override + public void onBindViewHolder(CardHolder holder, int position) { + holder.bindView(mList.get(position)); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + /** + * 右划 + */ + public void swipe2Right() { + Logger.d("右划"); + } + + /** + * 左划 + */ + public void swipe2left() { + Logger.d("左划"); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java index f3619ed..0183ad1 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/CardHolder.java @@ -1,10 +1,35 @@ package com.example.ninefourone.nutritionmaster.adapter; import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.example.ninefourone.nutritionmaster.R; + +import butterknife.BindView; +import butterknife.ButterKnife; /** * Created by ScorpioMiku on 2018/9/2. */ public class CardHolder extends RecyclerView.ViewHolder { + @BindView(R.id.iv_photo) + ImageView ivPhoto; + @BindView(R.id.tv_name) + TextView tvName; + @BindView(R.id.tv_sign) + TextView tvSign; + + + + public CardHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void bindView(String text) { + tvName.setText(text); + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java index b2cced9..f705e2e 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/HomePagerAdapter.java @@ -6,7 +6,7 @@ import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import com.example.ninefourone.nutritionmaster.R; -import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page1.Page1; +import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization.CustomizationFragment; import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.bodyinformation.BodyInformationFragment; import com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page3.Page3; @@ -30,7 +30,7 @@ public class HomePagerAdapter extends FragmentPagerAdapter { if (fragments[position] == null) { switch (position) { case 0: - fragments[position] = Page1.getInstance(); + fragments[position] = CustomizationFragment.getInstance(); break; case 1: fragments[position] = BodyInformationFragment.getInstance(); diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardConfig.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardConfig.java index e50e45e..9e3dc07 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardConfig.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardConfig.java @@ -1,4 +1,4 @@ -package com.example.ninefourone.nutritionmaster.layoutmanager; +package com.example.ninefourone.nutritionmaster.cardconfig; import android.content.Context; import android.util.TypedValue; diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java index 78fd43e..6fd06c0 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/CardItemTouchCallBack.java @@ -1,27 +1,30 @@ -package com.fu.tantancard; +package com.example.ninefourone.nutritionmaster.cardconfig; import android.graphics.Canvas; +import android.os.Build; +import android.support.annotation.RequiresApi; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; import android.util.Log; import android.view.View; +import com.example.ninefourone.nutritionmaster.adapter.CardAdapter; +import com.example.ninefourone.nutritionmaster.adapter.CardHolder; + import java.util.List; /** - * Created by Fu. - * QQ:908323236 - * 2017/11/10 11:27 + * Created by ScorpioMiku on 2018/9/2. */ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { private static final String TAG = "CardItemTouchCallBack"; private RecyclerView mRecyclerView; - private MainActivity.CardAdapter mAdapter; + private CardAdapter mAdapter; private List mDatas; - public CardItemTouchCallBack(RecyclerView recyclerView, MainActivity.CardAdapter adapter, List datas) { + public CardItemTouchCallBack(RecyclerView recyclerView, CardAdapter adapter, List datas) { this.mRecyclerView = recyclerView; this.mAdapter = adapter; this.mDatas = datas; @@ -93,11 +96,11 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { switch (direction) { case 4: Log.d(TAG, "onSwiped: 左边滑出"); - mAdapter.addDelCount(); + mAdapter.swipe2left(); break; case 8: Log.d(TAG, "onSwiped: 右边滑出"); - mAdapter.addLoveCount(); + mAdapter.swipe2Right(); break; } //移除这条数据 @@ -111,10 +114,8 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { mAdapter.notifyDataSetChanged(); //复位 viewHolder.itemView.setRotation(0); - if (viewHolder instanceof MainActivity.CardAdapter.CardViewHolder) { - MainActivity.CardAdapter.CardViewHolder holder = (MainActivity.CardAdapter.CardViewHolder) viewHolder; - holder.iv_love.setAlpha(0f); - holder.iv_del.setAlpha(0f); + if (viewHolder instanceof CardHolder) { + CardHolder holder = (CardHolder) viewHolder; } } @@ -130,6 +131,7 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { * @param actionState * @param isCurrentlyActive */ + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { @@ -175,17 +177,17 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { //第一层左右滑动的时候稍微有点旋转 childView.setRotation(xFraction * 15); //这里最多旋转15度 - if (viewHolder instanceof MainActivity.CardAdapter.CardViewHolder) { - MainActivity.CardAdapter.CardViewHolder holder = (MainActivity.CardAdapter.CardViewHolder) viewHolder; + if (viewHolder instanceof CardHolder) { + CardHolder holder = (CardHolder) viewHolder; if (dX > 0) { //右滑,显示爱心 - holder.iv_love.setAlpha(xFraction); +// holder.iv_love.setAlpha(xFraction); } else if (dX < 0) { //左滑,显示叉,注意这里xFraction为负数,所以要取反 - holder.iv_del.setAlpha(-xFraction); +// holder.iv_del.setAlpha(-xFraction); } else { - holder.iv_love.setAlpha(0f); - holder.iv_del.setAlpha(0f); +// holder.iv_love.setAlpha(0f); +// holder.iv_del.setAlpha(0f); } } } @@ -194,10 +196,10 @@ public class CardItemTouchCallBack extends ItemTouchHelper.Callback { @Override public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) { - Log.i(TAG, "getSwipeThreshold: "); - if (isUpOrDown(viewHolder.itemView)) { //如果是向上或者向下滑动 - return Float.MAX_VALUE; //就返回阈值为很大 - } +// Log.i(TAG, "getSwipeThreshold: "); +// if (isUpOrDown(viewHolder.itemView)) { //如果是向上或者向下滑动 +// return Float.MAX_VALUE; //就返回阈值为很大 +// } return super.getSwipeThreshold(viewHolder); } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/SwipeCardLayoutManager.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/SwipeCardLayoutManager.java index c781faf..f55e40f 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/SwipeCardLayoutManager.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/cardconfig/SwipeCardLayoutManager.java @@ -1,4 +1,4 @@ -package com.example.ninefourone.nutritionmaster.layoutmanager; +package com.example.ninefourone.nutritionmaster.cardconfig; import android.os.Build; import android.support.annotation.RequiresApi; @@ -61,9 +61,9 @@ public class SwipeCardLayoutManager extends RecyclerView.LayoutManager { //高度空隙 int heightSpace = getHeight() - getDecoratedMeasuredHeight(view); //给子view布局,这里居中了 - layoutDecoratedWithMargins(view, widthSpace / 2, 200, + layoutDecoratedWithMargins(view, widthSpace / 2, 0, widthSpace / 2 + getDecoratedMeasuredWidth(view), - getDecoratedMeasuredHeight(view) + 200); + getDecoratedMeasuredHeight(view) + 0); /** * 下面要调整每一层itemview的的大小及Y轴和Z轴的偏移 diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java index 24a795d..663ed72 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/viewpagerfragments/customization/CustomizationFragment.java @@ -1,27 +1,93 @@ -package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.page1; +package com.example.ninefourone.nutritionmaster.modules.viewpagerfragments.customization; import android.os.Bundle; +import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.helper.ItemTouchHelper; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.CardAdapter; +import com.example.ninefourone.nutritionmaster.adapter.CardHolder; import com.example.ninefourone.nutritionmaster.base.BaseFragment; +import com.example.ninefourone.nutritionmaster.cardconfig.CardConfig; +import com.example.ninefourone.nutritionmaster.cardconfig.CardItemTouchCallBack; +import com.example.ninefourone.nutritionmaster.cardconfig.SwipeCardLayoutManager; + +import java.util.ArrayList; + +import butterknife.BindView; +import butterknife.ButterKnife; +import butterknife.Unbinder; /** * Created by ScorpioMiku on 2018/8/26. */ -public class Page1 extends BaseFragment { +public class CustomizationFragment extends BaseFragment { + + @BindView(R.id.card_recycler_view) + RecyclerView cardRecyclerView; + Unbinder unbinder; + + private CardAdapter cardAdapter; + private CardHolder cardHolder; + private ArrayList mDataList = new ArrayList<>(); + @Override public int getLayoutResId() { - return R.layout.page_1; + return R.layout.customization; } @Override public void initView(Bundle state) { - + loadData(); + initCardRecyclerView(); } public static BaseFragment getInstance() { - return new Page1(); + return new CustomizationFragment(); } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + // TODO: inflate a fragment view + View rootView = super.onCreateView(inflater, container, savedInstanceState); + unbinder = ButterKnife.bind(this, rootView); + return rootView; + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + unbinder.unbind(); + } + + @Override + protected void loadData() { + super.loadData(); + for (int i = 0; i < 10; i++) { + mDataList.add(i + "个"); + } + } + + /** + * 初始化card recyclerview + */ + private void initCardRecyclerView() { + CardConfig.initConfig(getContext()); + cardRecyclerView.setLayoutManager(new SwipeCardLayoutManager()); + cardAdapter = new CardAdapter(getContext(), mDataList); + cardRecyclerView.setAdapter(cardAdapter); + + CardItemTouchCallBack callBack = new CardItemTouchCallBack(cardRecyclerView, cardAdapter, mDataList); + //2.创建ItemTouchHelper并把callBack传进去 + ItemTouchHelper itemTouchHelper = new ItemTouchHelper(callBack); + //3.与RecyclerView关联起来 + itemTouchHelper.attachToRecyclerView(cardRecyclerView); + } + + } diff --git a/app/src/main/res/layout/card_item.xml b/app/src/main/res/layout/card_item.xml index d8fb324..0c02907 100644 --- a/app/src/main/res/layout/card_item.xml +++ b/app/src/main/res/layout/card_item.xml @@ -1,6 +1,46 @@ - + - \ No newline at end of file + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/customization.xml b/app/src/main/res/layout/customization.xml index a9ec1dd..c28e9dd 100644 --- a/app/src/main/res/layout/customization.xml +++ b/app/src/main/res/layout/customization.xml @@ -1,12 +1,13 @@ - + android:layout_height="match_parent"> - - \ No newline at end of file + android:background="@drawable/ic_record"> + + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9d22395..b2237a2 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,7 +1,7 @@ - page1 + 一周定制 今日信息 page3