diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5c015e5..c3568ba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -72,6 +72,7 @@ { public abstract void reportResult(); + public abstract void getReports(); } interface IReportModel extends IBaseModel{ Observable getReportResult(); + void getReports(); } interface IReportView extends IBaseView{ void UpdateList(Listlist); + + void showReports(List stringList); } } diff --git a/app/src/main/java/com/shunzhi/parent/model/report/ReportModel.java b/app/src/main/java/com/shunzhi/parent/model/report/ReportModel.java index 5d8f943..ba6b044 100644 --- a/app/src/main/java/com/shunzhi/parent/model/report/ReportModel.java +++ b/app/src/main/java/com/shunzhi/parent/model/report/ReportModel.java @@ -18,4 +18,9 @@ public class ReportModel implements ReportContract.IReportModel { public Observable getReportResult() { return null; } + + @Override + public void getReports() { + + } } diff --git a/app/src/main/java/com/shunzhi/parent/popu/ShaiXuanPop.java b/app/src/main/java/com/shunzhi/parent/popu/ShaiXuanPop.java new file mode 100644 index 0000000..3f2c3f9 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/popu/ShaiXuanPop.java @@ -0,0 +1,156 @@ +package com.shunzhi.parent.popu; + +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.huxq17.handygridview.HandyGridView; +import com.share.mvpsdk.utils.DisplayUtils; +import com.shunzhi.parent.R; +import com.shunzhi.parent.popu.handygrid.TagView; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by ToaHanDong on 2018/3/15. + */ + +public class ShaiXuanPop extends PopupWindow { + + HandyGridView handyGridView = null; + + List stringList = null; + + private Context mContext = null; + + MyGridAdapter myGridAdapter = null; + + TextView tvSubmit; + + public ShaiXuanPop(Context context) { + mContext = context; + + View view = View.inflate(context, R.layout.popu_shaixuan, null); + handyGridView = view.findViewById(R.id.handyGridView); + tvSubmit=view.findViewById(R.id.tvSubmit); + stringList = new ArrayList<>(); + + setWidth(WindowManager.LayoutParams.MATCH_PARENT); + setHeight(WindowManager.LayoutParams.WRAP_CONTENT); + + setOutsideTouchable(true); + setFocusable(true); + setBackgroundDrawable(new BitmapDrawable()); + + setContentView(view); + update(); + + tvSubmit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + } + }); + + } + + public void show(View parent) { + showAsDropDown(parent); + } + + public void setDatas(List strings) { + + if (null != stringList) { + stringList.clear(); + stringList.addAll(strings); + } + + if (null == myGridAdapter) myGridAdapter = new MyGridAdapter(); + if (null == handyGridView.getAdapter()) handyGridView.setAdapter(myGridAdapter); + myGridAdapter.notifyDataSetChanged(); + + } + + private class MyGridAdapter extends BaseAdapter { + + private GridView mGridView; + private boolean inEditMode = false;//设置是否可以编辑 + + public void setInEditMode(boolean inEditMode) { + this.inEditMode = inEditMode; + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return stringList.size(); + } + + @Override + public Object getItem(int i) { + return stringList.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View convertView, ViewGroup viewGroup) { + + if (mGridView == null) { + mGridView = (GridView) viewGroup; + } + + TagView textView; + + if (convertView == null) { + textView = new TagView(mContext); + convertView = textView; + textView.setMaxLines(1); + textView.setHeight(DisplayUtils.dp2px(30)); + int id = mContext.getResources().getIdentifier("s_grid_item", "drawable", mContext.getPackageName()); + Drawable drawable = mContext.getResources().getDrawable(id); + textView.setBackgroundDrawable(drawable); + textView.setTextColor(mContext.getResources().getColor(R.color.huodong_blue)); + textView.setGravity(Gravity.CENTER); + textView.setTag(false); + } else { + textView = (TagView) convertView; + } + + textView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + boolean isSelect = (boolean) view.getTag(); + view.setTag(!isSelect); + notifyDataSetChanged(); + } + }); + + boolean isSelect = (boolean) textView.getTag(); + if (isSelect) { + textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.shape_blue_select)); + textView.setTextColor(mContext.getResources().getColor(R.color.white)); + } else { + textView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.shape_blue_normal)); + textView.setTextColor(mContext.getResources().getColor(R.color.huodong_blue)); + } + textView.showDeleteIcon(false); + textView.setText(getItem(i).toString()); + return convertView; + } + } + + +} diff --git a/app/src/main/java/com/shunzhi/parent/popu/handygrid/TagView.java b/app/src/main/java/com/shunzhi/parent/popu/handygrid/TagView.java new file mode 100644 index 0000000..b4d45c2 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/popu/handygrid/TagView.java @@ -0,0 +1,116 @@ +package com.shunzhi.parent.popu.handygrid; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; + +import com.share.mvpsdk.utils.DisplayUtils; +import com.shunzhi.parent.R; + +/** + * Created by ToaHanDong on 2018/3/15. + */ + +public class TagView extends android.support.v7.widget.AppCompatTextView { + private Drawable deleteIcon; + private int iconWidth; + private int iconHeight; + private boolean showIcon = true; + private Rect mDelteRect; + private Rect mAssumeDelteRect; + + public TagView(Context context) { + super(context); +// int id = context.getResources().getIdentifier("ic_delete", "drawable", context.getPackageName()); + deleteIcon = context.getResources().getDrawable(R.drawable.ic_delete); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (mAssumeDelteRect == null) { + setDeleteBounds(); + } + if (showIcon) { + deleteIcon.draw(canvas); + } + } + + private void setDeleteBounds() { + iconWidth = deleteIcon.getIntrinsicWidth(); + iconHeight = deleteIcon.getIntrinsicHeight(); + int left = getWidth() - iconWidth; + int top = 0; + mDelteRect = new Rect(left, top, left + iconWidth, top + iconHeight); + //padding扩大了icon的点击范围 + int padding = DisplayUtils.dp2px(10); + mAssumeDelteRect = new Rect(mDelteRect.left, mDelteRect.top, mDelteRect.left + iconWidth + padding, mDelteRect.top + iconHeight + padding); + deleteIcon.setBounds(mDelteRect); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + int action = event.getAction(); + int x = (int) event.getX(); + int y = (int) event.getY(); + boolean contains = mAssumeDelteRect.contains(x, y); + switch (action) { + case MotionEvent.ACTION_DOWN: + if (contains && showIcon) { + return true; + } + break; + case MotionEvent.ACTION_MOVE: + break; + case MotionEvent.ACTION_UP: + if (contains && showIcon) { + if (mListener != null) { + mListener.onDelete(this); + } + return true; + } + break; + } + return super.onTouchEvent(event); + } + + private void log(String msg) { + Log.e(getClass().getCanonicalName(), msg); + } + + public void showDeleteIcon(boolean show) { + showIcon = show; + invalidate(); + } + + private OnTagDeleteListener mListener; + + public void setOnTagDeleteListener(OnTagDeleteListener listener) { + mListener = listener; + } + + public interface OnTagDeleteListener { + /** + * Delete view. + * + * @param deleteView + */ + void onDelete(View deleteView); + } +// @Override +// protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { +//// int widthSize = 100; +// int heightSize = DensityUtil.dip2px(getContext(),40); +//// +//// widthMeasureSpec = MeasureSpec.makeMeasureSpec(widthSize, MeasureSpec.AT_MOST); +// heightMeasureSpec = MeasureSpec.makeMeasureSpec(heightSize, MeasureSpec.AT_MOST); +// setMeasuredDimension(widthMeasureSpec, heightMeasureSpec); +//// super.onMeasure(widthMeasureSpec, heightMeasureSpec); +// Log.e("onmea","width="+getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec)+";height="+getDefaultSize(getSuggestedMinimumHeight(),heightMeasureSpec)); +// } +} diff --git a/app/src/main/java/com/shunzhi/parent/presenter/report/ReportPresenter.java b/app/src/main/java/com/shunzhi/parent/presenter/report/ReportPresenter.java index ec9d4a2..996c7a1 100644 --- a/app/src/main/java/com/shunzhi/parent/presenter/report/ReportPresenter.java +++ b/app/src/main/java/com/shunzhi/parent/presenter/report/ReportPresenter.java @@ -32,4 +32,18 @@ public class ReportPresenter extends ReportContract.ReportPresenter{ mIView.UpdateList(list); } + + @Override + public void getReports() { + + List stringList=new ArrayList<>(); + + stringList.add("全部"); + stringList.add("作业+"); + stringList.add("测评+"); + stringList.add("德育+"); + + mIView.showReports(stringList); + + } } diff --git a/app/src/main/java/com/shunzhi/parent/ui/fragment/CePingFragment.java b/app/src/main/java/com/shunzhi/parent/ui/fragment/CePingFragment.java index 06e8530..f018840 100644 --- a/app/src/main/java/com/shunzhi/parent/ui/fragment/CePingFragment.java +++ b/app/src/main/java/com/shunzhi/parent/ui/fragment/CePingFragment.java @@ -8,6 +8,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; +import android.util.Log; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; @@ -22,6 +23,7 @@ import com.shunzhi.parent.AppContext; import com.shunzhi.parent.R; import com.shunzhi.parent.contract.ceping.CepingContract; import com.shunzhi.parent.presenter.ceping.CePingPresenter; +import com.shunzhi.parent.views.DragFloatActionButton; import com.shunzhi.parent.views.TextAndImgShowView; import me.leefeng.citypicker.CityPicker; @@ -63,6 +65,7 @@ public class CePingFragment extends BaseMVPCompatFragment - implements ReportContract.IReportView { + implements ReportContract.IReportView ,View.OnClickListener{ + RecyclerView recyclerView; ReportAdapter reportAdapter; @@ -36,6 +36,10 @@ public class ReportFragment extends BaseMVPCompatFragment stringList) { + if (null!=shaiXuanPop){ + shaiXuanPop.setDatas(stringList); + shaiXuanPop.show(tvShaiXuan); + } + } + + @Override + public void onClick(View view) { + switch (view.getId()){ + case R.id.tvShaiXuan: + if (null==shaiXuanPop)shaiXuanPop=new ShaiXuanPop(getActivity()); + mPresenter.getReports(); + break; + } + } } diff --git a/app/src/main/java/com/shunzhi/parent/views/DragFloatActionButton.java b/app/src/main/java/com/shunzhi/parent/views/DragFloatActionButton.java new file mode 100644 index 0000000..8c467d0 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/views/DragFloatActionButton.java @@ -0,0 +1,115 @@ +package com.shunzhi.parent.views; + +import android.animation.ObjectAnimator; +import android.content.Context; +import android.support.design.widget.FloatingActionButton; +import android.util.AttributeSet; +import android.util.Log; +import android.view.MotionEvent; +import android.view.ViewGroup; +import android.view.animation.DecelerateInterpolator; + + +/** + * Created by ToaHanDong on 2018/3/15. + */ + +public class DragFloatActionButton extends FloatingActionButton { + private int parentHeight; + private int parentWidth; + + public DragFloatActionButton(Context context) { + super(context); + } + + public DragFloatActionButton(Context context, AttributeSet attrs) { + super(context, attrs); + + } + + public DragFloatActionButton(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + private int lastX; + private int lastY; + + private boolean isDrag; + + @Override + public boolean onTouchEvent(MotionEvent event) { + int rawX = (int) event.getRawX(); + int rawY = (int) event.getRawY(); + + switch (event.getAction() & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + setPressed(true); + isDrag = false; + getParent().requestDisallowInterceptTouchEvent(true); + lastX = rawX; + lastY = rawY; + ViewGroup parent; + if (getParent() != null) { + parent = (ViewGroup) getParent(); + parentHeight = parent.getHeight(); + parentWidth = parent.getWidth(); + } + break; + + case MotionEvent.ACTION_MOVE: + if (parentHeight <= 0 || parentWidth == 0) { + isDrag = false; + break; + } else { + isDrag = true; + } + int dx = rawX - lastX; + int dy = rawY - lastY; + //这里修复一些华为手机无法触发点击事件 + int distance = (int) Math.sqrt(dx * dx + dy * dy); + if (distance == 0) { + isDrag = false; + break; + } + float x = getX() + dx; + float y = getY() + dy; + //检测是否到达边缘 左上右下 + x = x < 0 ? 0 : x > parentWidth - getWidth() ? parentWidth - getWidth() : x; + y = getY() < 0 ? 0 : getY() + getHeight() > parentHeight ? parentHeight - getHeight() : y; + setX(x); + setY(y); + lastX = rawX; + lastY = rawY; + break; + case MotionEvent.ACTION_UP: + if (!isNotDrag()) { + //恢复按压效果 + setPressed(false); + //Log.i("getX="+getX()+";screenWidthHalf="+screenWidthHalf); + if (rawX >= parentWidth / 2) { + //靠右吸附 + animate().setInterpolator(new DecelerateInterpolator()) + .setDuration(500) + .xBy(parentWidth - getWidth() - getX()) + .start(); + } else { + //靠左吸附 + ObjectAnimator oa = ObjectAnimator.ofFloat(this, "x", getX(), 0); + oa.setInterpolator(new DecelerateInterpolator()); + oa.setDuration(500); + oa.start(); + } + } + break; + + } + //如果是拖拽则消s耗事件,否则正常传递即可。!isNotDrag() || super.onTouchEvent(event); + return true; + } + + private boolean isNotDrag() { + return !isDrag && (getX() == 0 + || (getX() == parentWidth - getWidth())); + } + +} diff --git a/app/src/main/res/drawable-xhdpi/ic_delete.png b/app/src/main/res/drawable-xhdpi/ic_delete.png new file mode 100644 index 0000000..38c4ec0 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_delete.png differ diff --git a/app/src/main/res/drawable/s_grid_item.xml b/app/src/main/res/drawable/s_grid_item.xml new file mode 100644 index 0000000..cba024d --- /dev/null +++ b/app/src/main/res/drawable/s_grid_item.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_blue_normal.xml b/app/src/main/res/drawable/shape_blue_normal.xml new file mode 100644 index 0000000..aaac42f --- /dev/null +++ b/app/src/main/res/drawable/shape_blue_normal.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_blue_select.xml b/app/src/main/res/drawable/shape_blue_select.xml new file mode 100644 index 0000000..643d6b0 --- /dev/null +++ b/app/src/main/res/drawable/shape_blue_select.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_edit_radius4_balck.xml b/app/src/main/res/drawable/shape_edit_radius4_balck.xml new file mode 100644 index 0000000..899dc5a --- /dev/null +++ b/app/src/main/res/drawable/shape_edit_radius4_balck.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_ce_ping.xml b/app/src/main/res/layout/fragment_ce_ping.xml index de3409b..367263d 100644 --- a/app/src/main/res/layout/fragment_ce_ping.xml +++ b/app/src/main/res/layout/fragment_ce_ping.xml @@ -289,8 +289,11 @@ android:layout_gravity="bottom|right" android:layout_marginBottom="@dimen/size_dp_30" android:layout_marginRight="@dimen/size_dp_30" - app:backgroundTint="@color/xueqing_blue" + android:scaleType="center" + app:backgroundTint="@color/bg_gray_pressed" app:rippleColor="@color/xueqing_blue" app:fabSize="normal" + app:borderWidth="@dimen/size_dp_2" + app:elevation="@dimen/size_dp_10" android:src="@drawable/guanlianchild" /> diff --git a/app/src/main/res/layout/fragment_report.xml b/app/src/main/res/layout/fragment_report.xml index bca4cc2..05da01a 100644 --- a/app/src/main/res/layout/fragment_report.xml +++ b/app/src/main/res/layout/fragment_report.xml @@ -30,11 +30,13 @@ android:layout_gravity="center_vertical" android:layout_weight="1" android:gravity="center_horizontal" + android:id="@+id/tvDate" android:text="2018年3月" - android:textColor="@color/textColor" - android:textSize="@dimen/textSize16" /> + android:textColor="@color/white" + android:textSize="@dimen/textSize18" /> - @@ -20,7 +20,7 @@ android:textColor="#20519f" android:textSize="@dimen/sp_16" /> - - + android:layout_centerInParent="true" + android:gravity="center_horizontal" + > + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 54b1b4a..37c9671 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -13,13 +13,13 @@ 48dp - 34sp - 36sp - 24sp - 20sp - 16sp - 14sp - 12sp + 34dp + 36dp + 24dp + 20dp + 16dp + 14dp + 12dp 2dp @@ -41,7 +41,7 @@ 12sp 14sp - 16sp + 16dp 18sp 10dp diff --git a/mvpsdk/build.gradle b/mvpsdk/build.gradle index d73d01e..c670878 100644 --- a/mvpsdk/build.gradle +++ b/mvpsdk/build.gradle @@ -113,6 +113,9 @@ dependencies { //日历控件 compile 'com.github.idic779:monthweekmaterialcalendarview:1.7' + //标签拖动排序 + compile 'com.huxq17.handygridview:handygridview:1.1.0' + //悬浮窗 // compile 'com.github.yhaolpz:FloatWindow:1.0.8' diff --git a/mvpsdk/src/main/res/values/strings.xml b/mvpsdk/src/main/res/values/strings.xml index b98c96e..7165da5 100644 --- a/mvpsdk/src/main/res/values/strings.xml +++ b/mvpsdk/src/main/res/values/strings.xml @@ -4,7 +4,7 @@ Loading…… Load failed. Please click me again Press again to exit - +报告 Day Week -- libgit2 0.21.0