From 433faa535eb80e96750fc83868f31e5982c40b9d Mon Sep 17 00:00:00 2001 From: itgaojian Date: Fri, 10 Mar 2023 09:41:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E9=97=BB=E8=AF=A6=E6=83=85=E9=A1=B5?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E6=8E=A5=E5=8F=A3=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/BannerImageTextAllAdapter.java | 10 +- .../core/widget/base/BannerTextAllHolder.java | 28 + .../ExpandableStatusFix.java | 14 + .../ExpandableTextView.java | 1188 +++++++++++++++++ .../views/expandabletextview/FormatData.java | 102 ++ .../views/expandabletextview/LinkType.java | 11 + .../views/expandabletextview/StatusType.java | 14 + .../views/expandabletextview/UUIDUtils.java | 35 + cm_utils/src/main/res/drawable-xhdpi/link.png | Bin 0 -> 1883 bytes .../main/res/layout/item_banner_text_all.xml | 42 +- cm_utils/src/main/res/values/attrs.xml | 39 +- cm_utils/src/main/res/values/strings.xml | 4 + .../controller/AudioPrepareView.java | 136 ++ .../activitys/news/NewsListActivity.java | 7 +- .../news/NewsLocalDetailActivity.java | 300 ++++- .../activitys/news/NewsMainActivity.java | 3 +- .../activitys/news/NewsSearchActivity.java | 79 +- .../cultural/adapter/NewsAdapter.java | 2 +- .../cultural/adapter/NewsCategoryAdapter.java | 51 + .../cultural/beans/NewsDetailBean.java | 11 + .../cultural/fragment/HomeFragment.java | 53 +- .../cultural/fragment/NewsFragment.java | 25 +- .../cultural/holder/NewsCategoryHolder.java | 24 + .../drawable-xhdpi/ic_audio_rotate_icon.png | Bin 0 -> 7531 bytes .../res/drawable-xhdpi/ic_img_arrow_left.png | Bin 0 -> 5203 bytes .../res/drawable-xhdpi/ic_img_arrow_right.png | Bin 0 -> 5340 bytes .../res/drawable/shape_white_line_ra_2.xml | 8 + .../res/layout/activity_news_local_detail.xml | 95 +- .../src/main/res/layout/fragment_home.xml | 2 + .../src/main/res/layout/fragment_news.xml | 27 +- .../main/res/layout/item_news_category.xml | 18 + .../layout/item_skeleton_main_func_grid.xml | 59 + .../modulemine/activity/CollectActivity.java | 2 +- .../moduleplace/adapter/PlaceFuncAdapter.java | 2 + .../moduleplace/adapter/PlaceListAdapter.java | 2 + .../main/res/layout/fragment_place_main.xml | 18 +- 36 files changed, 2269 insertions(+), 142 deletions(-) create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/BannerTextAllHolder.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/ExpandableStatusFix.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/ExpandableTextView.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/FormatData.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/LinkType.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/StatusType.java create mode 100755 cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/UUIDUtils.java create mode 100755 cm_utils/src/main/res/drawable-xhdpi/link.png create mode 100755 moduleijkplayer/src/main/java/com/tengshisoft/moduleijkplayer/controller/AudioPrepareView.java create mode 100755 modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/adapter/NewsCategoryAdapter.java create mode 100755 modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/holder/NewsCategoryHolder.java create mode 100644 modulemain/src/main/res/drawable-xhdpi/ic_audio_rotate_icon.png create mode 100644 modulemain/src/main/res/drawable-xhdpi/ic_img_arrow_left.png create mode 100644 modulemain/src/main/res/drawable-xhdpi/ic_img_arrow_right.png create mode 100755 modulemain/src/main/res/drawable/shape_white_line_ra_2.xml create mode 100644 modulemain/src/main/res/layout/item_news_category.xml create mode 100755 modulemain/src/main/res/layout/item_skeleton_main_func_grid.xml diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/BannerImageTextAllAdapter.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/BannerImageTextAllAdapter.java index 698f151..5b6d672 100755 --- a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/BannerImageTextAllAdapter.java +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/base/BannerImageTextAllAdapter.java @@ -20,7 +20,7 @@ import java.util.List; * 邮箱: itgaojian@163.com * 描述: */ -public class BannerImageTextAllAdapter extends BannerAdapter { +public class BannerImageTextAllAdapter extends BannerAdapter { public BannerImageTextAllAdapter(List datas) { super(datas); @@ -28,13 +28,13 @@ public class BannerImageTextAllAdapter extends BannerAdapter mLimitLines); + } + + if (!mNeedExpend || mLineCount <= mLimitLines) { + //不需要展开功能 直接处理链接模块 + return dealLink(mFormatData, false); + } else { + return dealLink(mFormatData, true); + } + } + + /** + * 设置追加的内容 + * + * @param endExpendContent + */ + public void setEndExpendContent(String endExpendContent) { + this.mEndExpandContent = endExpendContent; + } + + /** + * 设置内容 + * + * @param content + */ + public void setContent(final String content) { + mContent = content; + if (isAttached) + doSetContent(); + } + + /** + * 实际设置内容的 + */ + private void doSetContent() { + if (mContent == null) { + return; + } + currentLines = mLimitLines; + + if (mWidth <= 0) { + if (getWidth() > 0) + mWidth = getWidth() - getPaddingLeft() - getPaddingRight(); + } + + if (mWidth <= 0) { + if (retryTime > 10) { + setText(DEFAULT_CONTENT); + } + this.post(new Runnable() { + @Override + public void run() { + retryTime++; + setContent(mContent.toString()); + } + }); + } else { + setRealContent(mContent.toString()); + } + } + + /** + * 设置最后的收起文案 + * + * @return + */ + private String getExpandEndContent() { + if (TextUtils.isEmpty(mEndExpandContent)) { + return String.format(Locale.getDefault(), " %s", + mContractString); + } else { + return String.format(Locale.getDefault(), " %s %s", + mEndExpandContent, mContractString); + } + } + + /** + * 设置展开的文案 + * + * @return + */ + private String getHideEndContent() { + if (TextUtils.isEmpty(mEndExpandContent)) { + return String.format(Locale.getDefault(), mNeedAlwaysShowRight ? " %s" : "... %s", + mExpandString); + } else { + return String.format(Locale.getDefault(), mNeedAlwaysShowRight ? " %s %s" : "... %s %s", + mEndExpandContent, mExpandString); + } + } + + /** + * 处理文字中的链接问题 + * + * @param formatData + * @param ignoreMore + */ + private SpannableStringBuilder dealLink(FormatData formatData, boolean ignoreMore) { + SpannableStringBuilder ssb = new SpannableStringBuilder(); + //获取存储的状态 + if (mModel != null && mModel.getStatus() != null) { + boolean isHide = false; + if (mModel.getStatus() != null) { + if (mModel.getStatus().equals(StatusType.STATUS_CONTRACT)) { + //收起 + isHide = true; + } else { + //展开 + isHide = false; + } + } + if (isHide) { + currentLines = mLimitLines + ((mLineCount - mLimitLines)); + } else { + if (mNeedContract) + currentLines = mLimitLines; + } + } + //处理折叠操作 + if (ignoreMore) { + if (currentLines < mLineCount) { + int index = currentLines - 1; + int endPosition = mDynamicLayout.getLineEnd(index); + int startPosition = mDynamicLayout.getLineStart(index); + float lineWidth = mDynamicLayout.getLineWidth(index); + + String endString = getHideEndContent(); + + //计算原内容被截取的位置下标 + int fitPosition = + getFitPosition(endString, endPosition, startPosition, lineWidth, mPaint.measureText(endString), 0); + String substring = formatData.getFormatedContent().substring(0, fitPosition); + if (substring.endsWith("\n")) { + substring = substring.substring(0, substring.length() - "\n".length()); + } + ssb.append(substring); + + if (mNeedAlwaysShowRight) { + //计算一下最后一行有没有充满 + float lastLineWidth = 0; + for (int i = 0; i < index; i++) { + lastLineWidth += mDynamicLayout.getLineWidth(i); + } + lastLineWidth = lastLineWidth / (index); + float emptyWidth = lastLineWidth - lineWidth - mPaint.measureText(endString); + if (emptyWidth > 0) { + float measureText = mPaint.measureText(Space); + int count = 0; + while (measureText * count < emptyWidth) { + count++; + } + count = count - 1; + for (int i = 0; i < count; i++) { + ssb.append(Space); + } + } + } + + //在被截断的文字后面添加 展开 文字 + ssb.append(endString); + + int expendLength = TextUtils.isEmpty(mEndExpandContent) ? 0 : 2 + mEndExpandContent.length(); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + if (needRealExpandOrContract) { + if (mModel != null) { + mModel.setStatus(StatusType.STATUS_CONTRACT); + action(mModel.getStatus()); + } else { + action(); + } + } + if (expandOrContractClickListener != null) { + expandOrContractClickListener.onClick(StatusType.STATUS_EXPAND); + } + } + + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setColor(mExpandTextColor); + ds.setUnderlineText(false); + } + }, ssb.length() - mExpandString.length() - expendLength, ssb.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } else { + ssb.append(formatData.getFormatedContent()); + if (mNeedContract) { + String endString = getExpandEndContent(); + + if (mNeedAlwaysShowRight) { + //计算一下最后一行有没有充满 + int index = mDynamicLayout.getLineCount() - 1; + float lineWidth = mDynamicLayout.getLineWidth(index); + float lastLineWidth = 0; + for (int i = 0; i < index; i++) { + lastLineWidth += mDynamicLayout.getLineWidth(i); + } + lastLineWidth = lastLineWidth / (index); + float emptyWidth = lastLineWidth - lineWidth - mPaint.measureText(endString); + if (emptyWidth > 0) { + float measureText = mPaint.measureText(Space); + int count = 0; + while (measureText * count < emptyWidth) { + count++; + } + count = count - 1; + for (int i = 0; i < count; i++) { + ssb.append(Space); + } + } + } + + ssb.append(endString); + + int expendLength = TextUtils.isEmpty(mEndExpandContent) ? 0 : 2 + mEndExpandContent.length(); + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + if (mModel != null) { + mModel.setStatus(StatusType.STATUS_EXPAND); + action(mModel.getStatus()); + } else { + action(); + } + if (expandOrContractClickListener != null) { + expandOrContractClickListener.onClick(StatusType.STATUS_CONTRACT); + } + } + + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setColor(mContractTextColor); + ds.setUnderlineText(false); + } + }, ssb.length() - mContractString.length() - expendLength, ssb.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } else { + if (!TextUtils.isEmpty(mEndExpandContent)) { + ssb.append(mEndExpandContent); + ssb.setSpan(new ForegroundColorSpan(mEndExpandTextColor), ssb.length() - mEndExpandContent.length(), ssb.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + } + } + } else { + ssb.append(formatData.getFormatedContent()); + if (!TextUtils.isEmpty(mEndExpandContent)) { + ssb.append(mEndExpandContent); + ssb.setSpan(new ForegroundColorSpan(mEndExpandTextColor), ssb.length() - mEndExpandContent.length(), ssb.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + } + //处理链接或者@用户 + List positionDatas = formatData.getPositionDatas(); + HH: + for (FormatData.PositionData data : positionDatas) { + if (ssb.length() >= data.getEnd()) { + if (data.getType().equals(LinkType.LINK_TYPE)) { + if (mNeedExpend && ignoreMore) { + int fitPosition = ssb.length() - getHideEndContent().length(); + if (data.getStart() < fitPosition) { + SelfImageSpan imageSpan = new SelfImageSpan(mLinkDrawable, ImageSpan.ALIGN_BASELINE); + //设置链接图标 + ssb.setSpan(imageSpan, data.getStart(), data.getStart() + 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); + //设置链接文字样式 + int endPosition = data.getEnd(); + if (currentLines < mLineCount) { + if (fitPosition > data.getStart() + 1 && fitPosition < data.getEnd()) { + endPosition = fitPosition; + } + } + if (data.getStart() + 1 < fitPosition) { + addUrl(ssb, data, endPosition); + } + } + } else { + SelfImageSpan imageSpan = new SelfImageSpan(mLinkDrawable, ImageSpan.ALIGN_BASELINE); + //设置链接图标 + ssb.setSpan(imageSpan, data.getStart(), data.getStart() + 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE); + addUrl(ssb, data, data.getEnd()); + } + } else if (data.getType().equals(LinkType.MENTION_TYPE)) { + //如果需要展开 + if (mNeedExpend && ignoreMore) { + int fitPosition = ssb.length() - getHideEndContent().length(); + if (data.getStart() < fitPosition) { + int endPosition = data.getEnd(); + if (currentLines < mLineCount) { + if (fitPosition < data.getEnd()) { + endPosition = fitPosition; + } + } + addMention(ssb, data, endPosition); + } + } else { + addMention(ssb, data, data.getEnd()); + } + } else if (data.getType().equals(LinkType.SELF)) { + //自定义 + //如果需要展开 + if (mNeedExpend && ignoreMore) { + int fitPosition = ssb.length() - getHideEndContent().length(); + if (data.getStart() < fitPosition) { + int endPosition = data.getEnd(); + if (currentLines < mLineCount) { + if (fitPosition < data.getEnd()) { + endPosition = fitPosition; + } + } + addSelf(ssb, data, endPosition); + } + } else { + addSelf(ssb, data, data.getEnd()); + } + } + } + } + //清除链接点击时背景效果 + setHighlightColor(Color.TRANSPARENT); + //将内容设置到控件中 + setText(ssb); + return ssb; + } + + /** + * 获取需要插入的空格 + * + * @param emptyWidth + * @param endStringWidth + * @return + */ + private int getFitSpaceCount(float emptyWidth, float endStringWidth) { + float measureText = mPaint.measureText(Space); + int count = 0; + while (endStringWidth + measureText * count < emptyWidth) { + count++; + } + return --count; + } + + + /** + * 添加自定义规则 + * + * @param ssb + * @param data + * @param endPosition + */ + private void addSelf(SpannableStringBuilder ssb, final FormatData.PositionData data, int endPosition) { + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + if (linkClickListener != null) + linkClickListener.onLinkClickListener(LinkType.SELF, data.getSelfAim(), data.getSelfContent()); + } + + @Override + public void updateDrawState(TextPaint ds) { + ds.setColor(mSelfTextColor); + ds.setUnderlineText(false); + } + }, data.getStart(), endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + + + /** + * 添加@用户的Span + * + * @param ssb + * @param data + * @param endPosition + */ + private void addMention(SpannableStringBuilder ssb, final FormatData.PositionData data, int endPosition) { + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + if (linkClickListener != null) + linkClickListener.onLinkClickListener(LinkType.MENTION_TYPE, data.getUrl(), null); + } + + @Override + public void updateDrawState(TextPaint ds) { + ds.setColor(mMentionTextColor); + ds.setUnderlineText(false); + } + }, data.getStart(), endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + + /** + * 添加链接的span + * + * @param ssb + * @param data + * @param endPosition + */ + private void addUrl(SpannableStringBuilder ssb, final FormatData.PositionData data, int endPosition) { + ssb.setSpan(new ClickableSpan() { + @Override + public void onClick(View widget) { + if (linkClickListener != null) { + linkClickListener.onLinkClickListener(LinkType.LINK_TYPE, data.getUrl(), null); + } else { + //如果没有设置监听 则调用默认的打开浏览器显示连接 + Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri url = Uri.parse(data.getUrl()); + intent.setData(url); + mContext.startActivity(intent); + } + } + + @Override + public void updateDrawState(TextPaint ds) { + ds.setColor(mLinkTextColor); + ds.setUnderlineText(false); + } + }, data.getStart() + 1, endPosition, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); + } + + /** + * 设置当前的状态 + * + * @param type + */ + public void setCurrStatus(StatusType type) { + action(type); + } + + private void action() { + action(null); + } + + /** + * 执行展开和收回的动作 + */ + private void action(StatusType type) { + boolean isHide = currentLines < mLineCount; + if (type != null) { + mNeedAnimation = false; + } + if (mNeedAnimation) { + ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1); + final boolean finalIsHide = isHide; + valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + Float value = (Float) animation.getAnimatedValue(); + if (finalIsHide) { + currentLines = mLimitLines + (int) ((mLineCount - mLimitLines) * value); + } else { + if (mNeedContract) + currentLines = mLimitLines + (int) ((mLineCount - mLimitLines) * (1 - value)); + } + setText(setRealContent(mContent)); + } + }); + valueAnimator.setDuration(100); + valueAnimator.start(); + } else { + if (isHide) { + currentLines = mLimitLines + ((mLineCount - mLimitLines)); + } else { + if (mNeedContract) + currentLines = mLimitLines; + } + setText(setRealContent(mContent)); + } + } + + /** + * 计算原内容被裁剪的长度 + * + * @param endString + * @param endPosition 指定行最后文字的位置 + * @param startPosition 指定行文字开始的位置 + * @param lineWidth 指定行文字的宽度 + * @param endStringWith 最后添加的文字的宽度 + * @param offset 偏移量 + * @return + */ + private int getFitPosition(String endString, int endPosition, int startPosition, float lineWidth, + float endStringWith, float offset) { + //最后一行需要添加的文字的字数 + int position = (int) ((lineWidth - (endStringWith + offset)) * (endPosition - startPosition) + / lineWidth); + + if (position <= endString.length()) return endPosition; + + //计算最后一行需要显示的正文的长度 + float measureText = mPaint.measureText( + (mFormatData.getFormatedContent().substring(startPosition, startPosition + position))); + + //如果最后一行需要显示的正文的长度比最后一行的长减去“展开”文字的长度要短就可以了 否则加个空格继续算 + if (measureText <= lineWidth - endStringWith) { + return startPosition + position; + } else { + return getFitPosition(endString, endPosition, startPosition, lineWidth, endStringWith, offset + mPaint.measureText(Space)); + } + } + + /** + * 对传入的数据进行正则匹配并处理 + * + * @param content + * @return + */ + private FormatData formatData(CharSequence content) { + FormatData formatData = new FormatData(); + List datas = new ArrayList<>(); + //对链接进行正则匹配 +// Pattern pattern = Pattern.compile(regexp, Pattern.CASE_INSENSITIVE); + Pattern pattern = Pattern.compile(self_regex, Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(content); + StringBuffer newResult = new StringBuffer(); + int start = 0; + int end = 0; + int temp = 0; + Map convert = new HashMap<>(); + //对自定义的进行正则匹配 + if (mNeedSelf) { + List datasMention = new ArrayList<>(); + while (matcher.find()) { + start = matcher.start(); + end = matcher.end(); + newResult.append(content.toString().substring(temp, start)); + //将匹配到的内容进行统计处理 + String result = matcher.group(); + if (!TextUtils.isEmpty(result)) { + //解析数据 + String aimSrt = result.substring(result.indexOf("[") + 1, result.indexOf("]")); + String contentSrt = result.substring(result.indexOf("(") + 1, result.indexOf(")")); + String key = UUIDUtils.getUuid(aimSrt.length()); + datasMention.add(new FormatData.PositionData(newResult.length() + 1, newResult.length() + 2 + aimSrt.length(), aimSrt, contentSrt, LinkType.SELF)); + convert.put(key, aimSrt); + newResult.append(" " + key + " "); + temp = end; + } + } + datas.addAll(datasMention); + } + //重置状态 + newResult.append(content.toString().substring(end, content.toString().length())); + content = newResult.toString(); + newResult = new StringBuffer(); + start = 0; + end = 0; + temp = 0; + + if (mNeedLink) { + pattern = AUTOLINK_WEB_URL; + matcher = pattern.matcher(content); + while (matcher.find()) { + start = matcher.start(); + end = matcher.end(); + newResult.append(content.toString().substring(temp, start)); + if (mNeedConvertUrl) { + //将匹配到的内容进行统计处理 + datas.add(new FormatData.PositionData(newResult.length() + 1, newResult.length() + 2 + TARGET.length(), matcher.group(), LinkType.LINK_TYPE)); + newResult.append(" " + TARGET + " "); + } else { + String result = matcher.group(); + String key = UUIDUtils.getUuid(result.length()); + datas.add(new FormatData.PositionData(newResult.length(), newResult.length() + 2 + key.length(), result, LinkType.LINK_TYPE)); + convert.put(key, result); + newResult.append(" " + key + " "); + } + temp = end; + } + } + newResult.append(content.toString().substring(end, content.toString().length())); + //对@用户 进行正则匹配 + if (mNeedMention) { + pattern = Pattern.compile(regexp_mention, Pattern.CASE_INSENSITIVE); + matcher = pattern.matcher(newResult.toString()); + List datasMention = new ArrayList<>(); + while (matcher.find()) { + //将匹配到的内容进行统计处理 + datasMention.add(new FormatData.PositionData(matcher.start(), matcher.end(), matcher.group(), LinkType.MENTION_TYPE)); + } + datas.addAll(0, datasMention); + } + if (!convert.isEmpty()) { + String resultData = newResult.toString(); + for (Map.Entry entry : convert.entrySet()) { + resultData = resultData.replaceAll(entry.getKey(), entry.getValue()); + } + newResult = new StringBuffer(resultData); + } + formatData.setFormatedContent(newResult.toString()); + formatData.setPositionDatas(datas); + return formatData; + } + + /** + * 自定义ImageSpan 让Image 在行内居中显示 + */ + class SelfImageSpan extends ImageSpan { + private Drawable drawable; + + public SelfImageSpan(Drawable d, int verticalAlignment) { + super(d, verticalAlignment); + this.drawable = d; + } + + @Override + public Drawable getDrawable() { + return drawable; + } + + @Override + public void draw(@NonNull Canvas canvas, CharSequence text, + int start, int end, float x, + int top, int y, int bottom, @NonNull Paint paint) { + // image to draw + Drawable b = getDrawable(); + // font metrics of text to be replaced + Paint.FontMetricsInt fm = paint.getFontMetricsInt(); + int transY = (y + fm.descent + y + fm.ascent) / 2 + - b.getBounds().bottom / 2; + canvas.save(); + canvas.translate(x, transY); + b.draw(canvas); + canvas.restore(); + } + } + + /** + * 绑定状态 + * + * @param model + */ + public void bind(ExpandableStatusFix model) { + mModel = model; + } + + public static class LocalLinkMovementMethod extends LinkMovementMethod { + static LocalLinkMovementMethod sInstance; + + + public static LocalLinkMovementMethod getInstance() { + if (sInstance == null) + sInstance = new LocalLinkMovementMethod(); + + return sInstance; + } + + @Override + public boolean onTouchEvent(TextView widget, + Spannable buffer, MotionEvent event) { + int action = event.getAction(); + + if (action == MotionEvent.ACTION_UP || + action == MotionEvent.ACTION_DOWN) { + int x = (int) event.getX(); + int y = (int) event.getY(); + + x -= widget.getTotalPaddingLeft(); + y -= widget.getTotalPaddingTop(); + + x += widget.getScrollX(); + y += widget.getScrollY(); + + Layout layout = widget.getLayout(); + int line = layout.getLineForVertical(y); + int off = layout.getOffsetForHorizontal(line, x); + + ClickableSpan[] link = buffer.getSpans( + off, off, ClickableSpan.class); + + if (link.length != 0) { + if (action == MotionEvent.ACTION_UP) { + link[0].onClick(widget); + } else if (action == MotionEvent.ACTION_DOWN) { + Selection.setSelection(buffer, + buffer.getSpanStart(link[0]), + buffer.getSpanEnd(link[0])); + } + + if (widget instanceof ExpandableTextView) { + ((ExpandableTextView) widget).linkHit = true; + } + return true; + } else { + Selection.removeSelection(buffer); + Touch.onTouchEvent(widget, buffer, event); + return false; + } + } + return Touch.onTouchEvent(widget, buffer, event); + } + } + + boolean dontConsumeNonUrlClicks = true; + + @Override + public boolean onTouchEvent(MotionEvent event) { + int action = event.getAction(); + linkHit = false; + boolean res = super.onTouchEvent(event); + + if (dontConsumeNonUrlClicks) + return linkHit; + + //防止选择复制的状态不消失 + if (action == MotionEvent.ACTION_UP) { + this.setTextIsSelectable(false); + } + + return res; + } + + public interface OnLinkClickListener { + void onLinkClickListener(LinkType type, String content, String selfContent); + } + + public interface OnGetLineCountListener { + /** + * lineCount 预估可能占有的行数 + * canExpand 是否达到可以展开的条件 + */ + void onGetLineCount(int lineCount, boolean canExpand); + } + + private OnGetLineCountListener onGetLineCountListener; + + public OnGetLineCountListener getOnGetLineCountListener() { + return onGetLineCountListener; + } + + public void setOnGetLineCountListener(OnGetLineCountListener onGetLineCountListener) { + this.onGetLineCountListener = onGetLineCountListener; + } + + public interface OnExpandOrContractClickListener { + void onClick(StatusType type); + } + + public OnLinkClickListener getLinkClickListener() { + return linkClickListener; + } + + public void setLinkClickListener(OnLinkClickListener linkClickListener) { + this.linkClickListener = linkClickListener; + } + + public boolean ismNeedMention() { + return mNeedMention; + } + + public void setNeedMention(boolean mNeedMention) { + this.mNeedMention = mNeedMention; + } + + public Drawable getLinkDrawable() { + return mLinkDrawable; + } + + public void setLinkDrawable(Drawable mLinkDrawable) { + this.mLinkDrawable = mLinkDrawable; + } + + public boolean isNeedContract() { + return mNeedContract; + } + + public void setNeedContract(boolean mNeedContract) { + this.mNeedContract = mNeedContract; + } + + public boolean isNeedExpend() { + return mNeedExpend; + } + + public void setNeedExpend(boolean mNeedExpend) { + this.mNeedExpend = mNeedExpend; + } + + public boolean isNeedAnimation() { + return mNeedAnimation; + } + + public void setNeedAnimation(boolean mNeedAnimation) { + this.mNeedAnimation = mNeedAnimation; + } + + public int getExpandableLineCount() { + return mLineCount; + } + + public void setExpandableLineCount(int mLineCount) { + this.mLineCount = mLineCount; + } + + public int getExpandTextColor() { + return mExpandTextColor; + } + + public void setExpandTextColor(int mExpandTextColor) { + this.mExpandTextColor = mExpandTextColor; + } + + public int getExpandableLinkTextColor() { + return mLinkTextColor; + } + + public void setExpandableLinkTextColor(int mLinkTextColor) { + this.mLinkTextColor = mLinkTextColor; + } + + public int getContractTextColor() { + return mContractTextColor; + } + + public void setContractTextColor(int mContractTextColor) { + this.mContractTextColor = mContractTextColor; + } + + public String getExpandString() { + return mExpandString; + } + + public void setExpandString(String mExpandString) { + this.mExpandString = mExpandString; + } + + public String getContractString() { + return mContractString; + } + + public void setContractString(String mContractString) { + this.mContractString = mContractString; + } + + public int getEndExpandTextColor() { + return mEndExpandTextColor; + } + + public void setEndExpandTextColor(int mEndExpandTextColor) { + this.mEndExpandTextColor = mEndExpandTextColor; + } + + public boolean isNeedLink() { + return mNeedLink; + } + + public void setNeedLink(boolean mNeedLink) { + this.mNeedLink = mNeedLink; + } + + public int getSelfTextColor() { + return mSelfTextColor; + } + + public void setSelfTextColor(int mSelfTextColor) { + this.mSelfTextColor = mSelfTextColor; + } + + public boolean isNeedSelf() { + return mNeedSelf; + } + + public void setNeedSelf(boolean mNeedSelf) { + this.mNeedSelf = mNeedSelf; + } + + public boolean isNeedAlwaysShowRight() { + return mNeedAlwaysShowRight; + } + + public void setNeedAlwaysShowRight(boolean mNeedAlwaysShowRight) { + this.mNeedAlwaysShowRight = mNeedAlwaysShowRight; + } + + public OnExpandOrContractClickListener getExpandOrContractClickListener() { + return expandOrContractClickListener; + } + + public void setExpandOrContractClickListener(OnExpandOrContractClickListener expandOrContractClickListener) { + this.expandOrContractClickListener = expandOrContractClickListener; + } + + public void setExpandOrContractClickListener(OnExpandOrContractClickListener expandOrContractClickListener, boolean needRealExpandOrContract) { + this.expandOrContractClickListener = expandOrContractClickListener; + this.needRealExpandOrContract = needRealExpandOrContract; + } +} diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/FormatData.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/FormatData.java new file mode 100755 index 0000000..9b7a553 --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/FormatData.java @@ -0,0 +1,102 @@ +package com.sucstepsoft.cm_utils.core.widget.views.expandabletextview; + + +import java.util.List; + +/** + * 记录可以点击的内容 和 位置 + */ + public class FormatData { + private String formatedContent; + private List positionDatas; + + public String getFormatedContent() { + return formatedContent; + } + + public void setFormatedContent(String formatedContent) { + this.formatedContent = formatedContent; + } + + public List getPositionDatas() { + return positionDatas; + } + + public void setPositionDatas(List positionDatas) { + this.positionDatas = positionDatas; + } + + public static class PositionData { + private int start; + private int end; + private String url; + private LinkType type; + //自定义法规则的aim + private String selfAim; + //自定义规则的内容 + private String selfContent; + + public String getSelfAim() { + return selfAim; + } + + public void setSelfAim(String selfAim) { + this.selfAim = selfAim; + } + + public String getSelfContent() { + return selfContent; + } + + public void setSelfContent(String selfContent) { + this.selfContent = selfContent; + } + + public LinkType getType() { + return type; + } + + public void setType(LinkType type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public PositionData(int start, int end, String url, LinkType type) { + this.start = start; + this.end = end; + this.url = url; + this.type = type; + } + + public PositionData(int start, int end, String selfAim,String selfContent, LinkType type) { + this.start = start; + this.end = end; + this.selfAim = selfAim; + this.selfContent = selfContent; + this.type = type; + } + + public int getStart() { + return start; + } + + public void setStart(int start) { + this.start = start; + } + + public int getEnd() { + return end; + } + + public void setEnd(int end) { + this.end = end; + } + } + } diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/LinkType.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/LinkType.java new file mode 100755 index 0000000..10c390d --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/LinkType.java @@ -0,0 +1,11 @@ +package com.sucstepsoft.cm_utils.core.widget.views.expandabletextview; + +//定义类型的枚举类型 +public enum LinkType { + //普通链接 + LINK_TYPE, + //@用户 + MENTION_TYPE, + //自定义规则 + SELF +} \ No newline at end of file diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/StatusType.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/StatusType.java new file mode 100755 index 0000000..8b73220 --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/StatusType.java @@ -0,0 +1,14 @@ +package com.sucstepsoft.cm_utils.core.widget.views.expandabletextview; + +/** + * @date: on 2018/9/20 + * @author: cretin + * @email: mxnzp_life@163.com + * @desc: 添加描述 + */ +public enum StatusType { + //展开 + STATUS_EXPAND, + //收起 + STATUS_CONTRACT +} diff --git a/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/UUIDUtils.java b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/UUIDUtils.java new file mode 100755 index 0000000..f261ff1 --- /dev/null +++ b/cm_utils/src/main/java/com/sucstepsoft/cm_utils/core/widget/views/expandabletextview/UUIDUtils.java @@ -0,0 +1,35 @@ +package com.sucstepsoft.cm_utils.core.widget.views.expandabletextview; + +import java.util.UUID; + +public class UUIDUtils { + /** + * 生成一个32位的不带-的不唯一的uuid + * + * @return + */ + public static String getUuid() { + return UUID.randomUUID().toString().replaceAll("-", ""); + } + + public static String[] chars = new String[]{"a", "b", "c", "d", "e", "f", + "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", + "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", + "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", + "W", "X", "Y", "Z"}; + + + /** + * 生成一个32位的不带-的不唯一的uuid + * + * @return + */ + public static String getUuid(int length) { + StringBuilder stringBuilder = new StringBuilder(UUID.randomUUID().toString()); + while (stringBuilder.length() < length) { + stringBuilder.append(UUID.randomUUID().toString()); + } + return stringBuilder.substring(0,length); + } +} \ No newline at end of file diff --git a/cm_utils/src/main/res/drawable-xhdpi/link.png b/cm_utils/src/main/res/drawable-xhdpi/link.png new file mode 100755 index 0000000000000000000000000000000000000000..3b3c1f7c376e1df18c9c9ad0b3d9647dd64c41de GIT binary patch literal 1883 zcmV-h2c-CkP)Px#32;bRa{vGqB>(^xB>_oNB=7(L032yVPgDQ^00IC20000003ZMW04M+e03ZMW z03QGV1EyhjQUL$}19C}3K~!i3?3l}I6fqpfXMG<;d=<2hP3GX^Cfc)DMGyT0R$E&q z8ASyzQWdQV+M6fOzNH>SPy{c&@X&)|1r@xAhk_Mv7K_r-+MNvQH!bN-hfLX6h)86K}^tjLIHNk1WaOo#J_j;V36ufDt$+sr! zh6;5n0eIba?SH0!491JGwx;@;gba%ohv+Uq51N2y*3sdjOAmzO)YNaE+XX<0nPBFu ztF~AM=W7a9i7hgFe^%&ecuu=jyqYNGRK@i66+k&9*8REKfM&Ek7MjzaXmcM+;dYYs zFBm;Lui=ZFw#7jU*M2ox*iffH202{;pF4500)A(d&%7!Dy%hlCCIGozNl=aO9DL)q zJ4Q}xe5+^bYq6FfBkyCNpGQC|;W^)>H%u{PoyTaGa;SQVOkOq##@6&~pw(KQKqxX# zZkl3YX8c8eEeT@HeG_ErTa;Lce3}qi3C;P;z7-X3($48uc^Xs>RVjZT%&&4g2VpET0Ey7ZHtc@>UbS~MEIM{4A^c~U~C2YcJ*j#RZBTmCQnO$8U81%#C#?S0O z)=4(%L`fUAxJPLM|8eT`@@sCSy?%Yr4_W`B>qBt+YOr0!pK*kRnMD=st0Xtx%O(Mxgwbam1u9I`v8qvFrQ z9cx!1>))dUPKq>SUT%AlzJ{;7U!1P4IBd8>;pF$qQ&l8@%uob8GTv|U)78P}V^~Ag zenZR^oyed~2k&wFXs}I!XU}uU_NsyEI+kE@!gcVNExmDmsva-33%b6mZc725Q(}9j z4l8{M&QK0KELe+`pROG5XlN8Xzi)y!ZbJQZAG)@)Zc7C3+OIukA1gA_F>^aBZCSbj z5R6<53&wpt!%};R_Cq0`QD}K1FEZi=EF3fQ?qjNRki zM5nzaGf*1GxrCp(vx`1FX$JteL>?nY(lBIhJE!p2CbfVjJGNc_(l&RDwaO7GosX^SOi}O zK|vJs7HMmn{a4U~py0vxB?nPNP&|lF1VKFrp1g<$6(1)B-*^xVdJsjZHPtrVjn!|~ z?y_uVb~j0zG?+lx-I@8n`M&?3{r}m~v@(Adv86WgR|S**3H=l68#Y*%m?ooXlL{ug z5;{H#Pt{Ls#3FrHnQ}@qdz;dxSq9r{6T4L)_5uG9M-=g|XuD$@?AYM8mR3J%N#coR zhlzFKzobC=CfnpsL!DMl@qST#sX4QMb+$G8+hq5ak?aT+Fd9`j@3`OoS%)^&ak47v zqP+iYXgZh zQgOt-4|Q`LrS57`Ke54lPwOHT$vEOs=C-TstJ01o`>05mlZp8?K_G)VkHnS1>oDky zBmN1_+7Lx9T0FZEg)y%E5dK;wT&x8D#3J+mB-Z3_i@JZmQJb#BC-yGNeq8$z$?H<# z*a6;5X_G6R+%ou189rX2-=8-(&#V-`Yof~)-I{Zh>x}j@#n+Hi#~CnAr3uUoMD4+jTDW|(m<+dzH2iPuL*20E<}k( z|2IVNAsm&B8Y_;(Cc0=h5Qw~fF-lOJeu#dV>uR3o0@uSeft}Z-IO0@eP_JL)(k*lA zL2QsCBF`_YgoU-E{5`K%(Vi1ff_6Y;XvX%OAWn8s8o%@|nB@V~^G&`xxe)K`V^5&0 z))W7TTE4EHb*i{0#F@G{TgUr*0$*^qMRdiAu&8ah_y$)QHrg8=Xn3IEf&bD2e*p`m V&N+o%Li+#!002ovPDHLkV1l>aZ)X4i literal 0 HcmV?d00001 diff --git a/cm_utils/src/main/res/layout/item_banner_text_all.xml b/cm_utils/src/main/res/layout/item_banner_text_all.xml index f47a645..8d9610c 100755 --- a/cm_utils/src/main/res/layout/item_banner_text_all.xml +++ b/cm_utils/src/main/res/layout/item_banner_text_all.xml @@ -1,5 +1,6 @@ - + android:layout_height="220dp" + android:layout_alignParentBottom="true"> + + + + + + + + + + + + \ No newline at end of file diff --git a/cm_utils/src/main/res/values/attrs.xml b/cm_utils/src/main/res/values/attrs.xml index 4353921..312b274 100755 --- a/cm_utils/src/main/res/values/attrs.xml +++ b/cm_utils/src/main/res/values/attrs.xml @@ -96,6 +96,43 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cm_utils/src/main/res/values/strings.xml b/cm_utils/src/main/res/values/strings.xml index 12b7d44..b50b665 100755 --- a/cm_utils/src/main/res/values/strings.xml +++ b/cm_utils/src/main/res/values/strings.xml @@ -31,4 +31,8 @@ 正在检查版本 安卓%1$s%2$s%3$s + + 收起 + 展开 + 网页链接 diff --git a/moduleijkplayer/src/main/java/com/tengshisoft/moduleijkplayer/controller/AudioPrepareView.java b/moduleijkplayer/src/main/java/com/tengshisoft/moduleijkplayer/controller/AudioPrepareView.java new file mode 100755 index 0000000..b5fb280 --- /dev/null +++ b/moduleijkplayer/src/main/java/com/tengshisoft/moduleijkplayer/controller/AudioPrepareView.java @@ -0,0 +1,136 @@ +package com.tengshisoft.moduleijkplayer.controller; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.Animation; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.tengshisoft.moduleijkplayer.R; +import com.tengshisoft.moduleijkplayer.player.VideoView; +import com.tengshisoft.moduleijkplayer.player.VideoViewManager; + +/** + * 准备播放界面 + */ +public class AudioPrepareView extends FrameLayout implements IControlComponent { + + private ControlWrapper mControlWrapper; + + private ImageView mThumb; + private ImageView mStartPlay; + private ProgressBar mLoading; + private FrameLayout mNetWarning; + private TextView mTvState; + + public AudioPrepareView(@NonNull Context context) { + super(context); + } + + public AudioPrepareView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public AudioPrepareView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + { + LayoutInflater.from(getContext()).inflate(R.layout.dkplayer_layout_prepare_view, this, true); + mThumb = findViewById(R.id.thumb); + mTvState = findViewById(R.id.tv_state); + mStartPlay = findViewById(R.id.start_play); + mLoading = findViewById(R.id.loading); + mNetWarning = findViewById(R.id.net_warning_layout); + findViewById(R.id.status_btn).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + mNetWarning.setVisibility(GONE); + VideoViewManager.instance().setPlayOnMobileNetwork(true); + mControlWrapper.start(); + } + }); + } + + /** + * 设置点击此界面开始播放 + */ + public void setClickStart() { + setOnClickListener(v -> mControlWrapper.start()); + } + + @Override + public void attach(@NonNull ControlWrapper controlWrapper) { + mControlWrapper = controlWrapper; + } + + @Override + public View getView() { + return this; + } + + @Override + public void onVisibilityChanged(boolean isVisible, Animation anim) { + + } + + public void setState(String state) { + mTvState.setText(state); + } + + @Override + public void onPlayStateChanged(int playState) { + switch (playState) { + case VideoView.STATE_PREPARING: + bringToFront(); + setVisibility(VISIBLE); + mStartPlay.setVisibility(View.GONE); + mNetWarning.setVisibility(GONE); + mLoading.setVisibility(View.VISIBLE); + break; + case VideoView.STATE_PLAYING: + case VideoView.STATE_PAUSED: + case VideoView.STATE_ERROR: + case VideoView.STATE_BUFFERING: + case VideoView.STATE_BUFFERED: + case VideoView.STATE_PLAYBACK_COMPLETED: + setVisibility(GONE); + break; + case VideoView.STATE_IDLE: + setVisibility(VISIBLE); + bringToFront(); + mLoading.setVisibility(View.GONE); + mNetWarning.setVisibility(GONE); + mStartPlay.setVisibility(View.VISIBLE); + mThumb.setVisibility(View.VISIBLE); + break; + case VideoView.STATE_START_ABORT: + setVisibility(VISIBLE); + mNetWarning.setVisibility(VISIBLE); + mNetWarning.bringToFront(); + break; + } + } + + @Override + public void onPlayerStateChanged(int playerState) { + + } + + @Override + public void setProgress(int duration, int position) { + + } + + @Override + public void onLockStateChanged(boolean isLocked) { + + } +} diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsListActivity.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsListActivity.java index 16c0723..b97d859 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsListActivity.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsListActivity.java @@ -37,6 +37,9 @@ import io.reactivex.annotations.NonNull; import io.reactivex.disposables.Disposable; import io.reactivex.schedulers.Schedulers; +/** + * 新闻只有一级 + */ @Route(path = PathConfig.PATH_MODULE_MAIN_NEWS_LIST) public class NewsListActivity extends BaseActivity { @BindView(R2.id.srl_content) @@ -223,6 +226,8 @@ public class NewsListActivity extends BaseActivity { mAdapter.setData(mNewsDatas); } } + mSrlContent.finishRefresh(); + mSrlContent.finishLoadMore(); } @Override @@ -275,7 +280,7 @@ public class NewsListActivity extends BaseActivity { url = rowsBean.getTemplateRecordUrl(); } ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE) .withString("id", rowsBean.getNewsContentId()) .withString("url", url) .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsLocalDetailActivity.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsLocalDetailActivity.java index bddc114..0b01296 100644 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsLocalDetailActivity.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsLocalDetailActivity.java @@ -40,7 +40,6 @@ import com.scwang.smartrefresh.layout.SmartRefreshLayout; import com.sucstepsoft.cm_utils.constant.PathConfig; import com.sucstepsoft.cm_utils.core.beans.AddPhotoBean; import com.sucstepsoft.cm_utils.core.beans.BaseImageBean; -import com.sucstepsoft.cm_utils.core.beans.BaseSuccessBean; import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.retrofit_net.RetrofitManager; import com.sucstepsoft.cm_utils.core.widget.base.BannerImageTextAllAdapter; @@ -51,18 +50,30 @@ import com.sucstepsoft.cm_utils.core.widget.views.ButtomDialogView; import com.sucstepsoft.cm_utils.core.widget.views.ItemSplitDivider; import com.sucstepsoft.cm_utils.core.widget.views.NestedScrollWebView; import com.sucstepsoft.cm_utils.core.widget.views.TypeFaceTextView; +import com.sucstepsoft.cm_utils.utils.ConvertUtils; import com.sucstepsoft.cm_utils.utils.ExceptionHandler; import com.sucstepsoft.cm_utils.utils.FileUtils; import com.sucstepsoft.cm_utils.utils.LogUtils; import com.sucstepsoft.cm_utils.utils.ProiderUtil; +import com.sucstepsoft.cm_utils.utils.ScreenUtils; import com.sucstepsoft.cm_utils.utils.TimeUtils; import com.sucstepsoft.cm_utils.utils.UIUtil; import com.sucstepsoft.cm_utils.utils.UserLgUtils; import com.sucstepsoft.cm_utils.utils.toast.ToastUtils; +import com.tengshisoft.moduleijkplayer.controller.AudioControlView; +import com.tengshisoft.moduleijkplayer.controller.AudioPrepareView; +import com.tengshisoft.moduleijkplayer.controller.CompleteView; +import com.tengshisoft.moduleijkplayer.controller.ErrorView; +import com.tengshisoft.moduleijkplayer.controller.GestureView; +import com.tengshisoft.moduleijkplayer.controller.PrepareView; +import com.tengshisoft.moduleijkplayer.controller.StandardVideoController; +import com.tengshisoft.moduleijkplayer.controller.TitleView; +import com.tengshisoft.moduleijkplayer.controller.VodControlView; import com.tengshisoft.moduleijkplayer.player.VideoView; import com.tengshisoft.mudulemain.R; import com.tengshisoft.mudulemain.R2; import com.tengshisoft.mudulemain.cultural.adapter.CommentAdapter; +import com.tengshisoft.mudulemain.cultural.adapter.NewsCategoryAdapter; import com.tengshisoft.mudulemain.cultural.beans.BaseUserBean; import com.tengshisoft.mudulemain.cultural.beans.CollectBean; import com.tengshisoft.mudulemain.cultural.beans.CommentListBean; @@ -145,8 +156,18 @@ public class NewsLocalDetailActivity extends BaseActivity { TypeFaceTextView mTvPublishTime; @BindView(R2.id.ll_title_view) LinearLayout mLlTitleView; - - + @BindView(R2.id.ll_audio)//音频 + LinearLayout mLlAudio; + @BindView(R2.id.vv_audio) + VideoView mAudio; + @BindView(R2.id.rlv_audio_category) + RecyclerView mRlvAudioCategory; + @BindView(R2.id.tv_audio_txt) + TypeFaceTextView mTvAudioTxt; + @BindView(R2.id.iv_banner_left) + ImageView mIvImgLeft; + @BindView(R2.id.iv_banner_right) + ImageView mIvImgRight; private AddPhotoBean mCurrentBean; private String mPicPath; private Unbinder mBind; @@ -168,6 +189,7 @@ public class NewsLocalDetailActivity extends BaseActivity { private String mTitle; private String mPhoto; private File mDestFile; + private NewsCategoryAdapter mCategoryAdapter; @Override protected int setLayoutId() { @@ -302,7 +324,6 @@ public class NewsLocalDetailActivity extends BaseActivity { } - /** * 获取新闻详情 */ @@ -356,14 +377,17 @@ public class NewsLocalDetailActivity extends BaseActivity { createImgView(newsDetailBean); break; case "3"://音频 + createAudioView(newsDetailBean); break; case "4"://视频 + createVideoView(newsDetailBean); break; case "5"://PDF break; case "6"://6链接 + createWebView(newsDetailBean); break; - case "1": + case "1"://文章 default: mLlTitleView.setVisibility(View.VISIBLE); mTvTitle.setText(newsDetailBean.getNewsContentTitle()); @@ -486,8 +510,13 @@ public class NewsLocalDetailActivity extends BaseActivity { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); } - String data = b.getNewsContentContent(); - mWvContent.loadData(data, "text/html", "utf-8"); + if ("6".equals(b.getNewsContentType())) { + mWvContent.loadUrl(b.getNewsContentContent()); + } else { + String data = b.getNewsContentContent(); + mWvContent.loadDataWithBaseURL(null, getHtmlData(data), "text/html", "utf-8", null); +// mWvContent.loadData(data, "text/html", "utf-8"); + } mWvContent.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { @@ -499,7 +528,12 @@ public class NewsLocalDetailActivity extends BaseActivity { super.onPageFinished(view, url); mContentSkeleton.hide(); view.getSettings().setBlockNetworkImage(false);//开启页面图片加载 - runOnUiThread(() -> mWvContent.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT))); + runOnUiThread(() -> { +// imgReset(); +// pSection(); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); + mWvContent.setLayoutParams(params); + }); } @Override @@ -510,16 +544,16 @@ public class NewsLocalDetailActivity extends BaseActivity { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (url.contains(BaseUrlApi.BASE_SYSTEM_IP + "news/route/file/download/true")) { - //TODO 数图资源 - ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_PDF) - .withString("title", mTitle) - .withString("url", url) - .navigation(); - } else { - view.loadUrl(url); - } +// if (url.contains(BaseUrlApi.BASE_SYSTEM_IP + "news/route/file/download/true")) { +// //TODO 数图资源 +// ARouter.getInstance() +// .build(PathConfig.PATH_MODULE_MAIN_NEWS_PDF) +// .withString("title", mTitle) +// .withString("url", url) +// .navigation(); +// } else { +// view.loadUrl(url); +// } return true; } }); @@ -532,44 +566,215 @@ public class NewsLocalDetailActivity extends BaseActivity { }); } + // {margin-left:5px;margin-right:5px;margin-top:10px;} + private String getHtmlData(String content) { + String head = "" + + "" + + "" + + ""; + return "" + head + "" + content + ""; + } + + /** + * 对图片进行重置大小,宽度就是手机屏幕宽度,高度根据宽度比便自动缩放 + **/ + private void imgReset() { + mWvContent.loadUrl("javascript:(function(){" + + "var objs = document.getElementsByTagName('img'); " + + "for(var i=0;i fileList = b.getFileList(); + if (i == 0) { + fileList.get(i).setCheck(true); + } else { + fileList.get(i).setCheck(false); + } + } + mCategoryAdapter = new NewsCategoryAdapter(mActivity, b.getFileList()); + mRlvAudioCategory.setLayoutManager(new LinearLayoutManager(mActivity, LinearLayoutManager.HORIZONTAL, false)); + mRlvAudioCategory.setAdapter(mCategoryAdapter); + mCategoryAdapter.addOnItemClickListener(fileListBean -> { + for (int i = 0; i < b.getFileList().size(); i++) { + NewsDetailBean.FileListBean fileBean = b.getFileList().get(i); + if (fileBean.getContentFileFileId().equals(fileListBean.getContentFileFileId())) { + fileBean.setCheck(true); + } else { + fileBean.setCheck(false); + } + } + mCategoryAdapter.setData(b.getFileList()); + setAudioUrl(fileListBean); + }); + StandardVideoController controller = new StandardVideoController(mActivity); + controller.setEnableOrientation(true); + AudioPrepareView prepareView = new AudioPrepareView(this);//准备播放界面 + ImageView thumb = prepareView.findViewById(com.tengshisoft.moduleijkplayer.R.id.thumb);//封面图 + Glide.with(mActivity).load(com.tengshisoft.moduleijkplayer.R.drawable.ic_img_default).into(thumb); + controller.addControlComponent(prepareView); + prepareView.setClickStart(); + CompleteView completeView = new CompleteView(this); + controller.addControlComponent(completeView);//自动完成播放界面 + ErrorView errorView = new ErrorView(this); + controller.addControlComponent(errorView);//错误界面 + TitleView titleView = new TitleView(this);//标题栏 + controller.addControlComponent(titleView); + //根据是否为直播设置不同的底部控制条 + AudioControlView vodControlView = new AudioControlView(this);//点播控制条 + controller.addControlComponent(vodControlView); + GestureView gestureControlView = new GestureView(this);//滑动控制视图 + controller.addControlComponent(gestureControlView); + controller.setCanChangePosition(false); + //设置标题 + titleView.setTitle(mTitle); + mAudio.setVideoController(controller); + mAudio.setUrl(BaseUrlApi.BASE_IMG_URL + b.getFileList().get(0).getContentFileFileId()); + mAudio.setLooping(true); + mTvAudioTxt.setText(b.getFileList().get(0).getContentFileText()); + } + + /** + * 设置音频Url + */ + private void setAudioUrl(NewsDetailBean.FileListBean b) { + if (mAudio == null) { + return; + } + if (mAudio.isPlaying()) { + mAudio.pause(); + mAudio.release(); + } + mAudio.setUrl(BaseUrlApi.BASE_IMG_URL + b.getContentFileFileId()); + mAudio.start(); + mTvAudioTxt.setText(b.getContentFileText()); } /** * 加载视频新闻 */ - private void createVideoView() { + private void createVideoView(NewsDetailBean b) { + mLlVideo.setVisibility(View.VISIBLE); + for (int i = 0; i < b.getFileList().size(); i++) { + List fileList = b.getFileList(); + if (i == 0) { + fileList.get(i).setCheck(true); + } else { + fileList.get(i).setCheck(false); + } + } + mCategoryAdapter = new NewsCategoryAdapter(mActivity, b.getFileList()); + mRlvVideoCategory.setLayoutManager(new LinearLayoutManager(mActivity, LinearLayoutManager.HORIZONTAL, false)); + mRlvVideoCategory.setAdapter(mCategoryAdapter); + mCategoryAdapter.addOnItemClickListener(fileListBean -> { + for (int i = 0; i < b.getFileList().size(); i++) { + NewsDetailBean.FileListBean fileBean = b.getFileList().get(i); + if (fileBean.getContentFileFileId().equals(fileListBean.getContentFileFileId())) { + fileBean.setCheck(true); + } else { + fileBean.setCheck(false); + } + } + mCategoryAdapter.setData(b.getFileList()); + setVideoUrl(fileListBean); + }); + StandardVideoController controller = new StandardVideoController(mActivity); + controller.setEnableOrientation(true); + PrepareView prepareView = new PrepareView(this);//准备播放界面 + ImageView thumb = prepareView.findViewById(com.tengshisoft.moduleijkplayer.R.id.thumb);//封面图 + Glide.with(mActivity).load(com.tengshisoft.moduleijkplayer.R.drawable.ic_img_default).into(thumb); + controller.addControlComponent(prepareView); + prepareView.setClickStart(); + CompleteView completeView = new CompleteView(this); + controller.addControlComponent(completeView);//自动完成播放界面 + ErrorView errorView = new ErrorView(this); + controller.addControlComponent(errorView);//错误界面 + TitleView titleView = new TitleView(this);//标题栏 + controller.addControlComponent(titleView); + //根据是否为直播设置不同的底部控制条 + VodControlView vodControlView = new VodControlView(this);//点播控制条 + controller.addControlComponent(vodControlView); + GestureView gestureControlView = new GestureView(this);//滑动控制视图 + controller.addControlComponent(gestureControlView); + controller.setCanChangePosition(false); + //设置标题 + titleView.setTitle(mTitle); + mVideo.setVideoController(controller); + mVideo.setUrl(BaseUrlApi.BASE_IMG_URL + b.getFileList().get(0).getContentFileFileId()); + mTvVideoTxt.setText(b.getFileList().get(0).getContentFileText()); +// mVideo.addOnStateChangeListener(mOnStateChangeListener); +// mVideo.start(); } + /** + * 设置视频URL + */ + private void setVideoUrl(NewsDetailBean.FileListBean b) { + if (mVideo == null) { + return; + } + if (mVideo.isPlaying()) { + mVideo.pause(); + mVideo.release(); + } + mVideo.setUrl(BaseUrlApi.BASE_IMG_URL + b.getContentFileFileId()); + mVideo.start(); + mTvVideoTxt.setText(b.getContentFileText()); + } + + /** * 加载图片新闻 */ private void createImgView(NewsDetailBean b) { mRlImg.setVisibility(View.VISIBLE); List mBannerList = new ArrayList<>(); + int screenHeight = ScreenUtils.getScreenHeight(); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(mBnImg.getLayoutParams()); + LogUtils.e(screenHeight); + params.height = screenHeight - ConvertUtils.dp2px(96) - 50; + mBnImg.setLayoutParams(params); for (int i = 0; i < b.getFileList().size(); i++) { NewsDetailBean.FileListBean fileListBean = b.getFileList().get(i); BaseImageBean bannerBean = new BaseImageBean(); -// bannerBean.setPhoto(BaseUrlApi.BASE_NEWS_IMG_URL + fileListBean.getContentFileFileId()); - if (i / 2 == 0) { -// bannerBean.setPhoto(BaseUrlApi.BASE_NEWS_IMG_URL + fileListBean.getContentFileFileId()); - bannerBean.setImgUrl("https://lmg.jj20.com/up/allimg/tp08/46042223542701-lp.jpg"); - } else { - bannerBean.setImgUrl("https://www.ssfiction.com/wp-content/uploads/2020/08/20200805_5f2b1669e9a24.jpg"); - } + bannerBean.setImgUrl(BaseUrlApi.BASE_NEWS_IMG_URL + fileListBean.getContentFileFileId()); bannerBean.setName(fileListBean.getContentFileText()); mBannerList.add(bannerBean); } BannerImageTextAllAdapter mBannerImageAdapter = new BannerImageTextAllAdapter(mBannerList); mBnImg.setAdapter(mBannerImageAdapter); mBnImg.setPageTransformer(new ScaleInTransformer()); - mBnImg.setDelayTime(10000L); + mBnImg.setDelayTime(12000L); mBnImg.start(); + + mIvImgLeft.setOnClickListener(v -> mBnImg.setCurrentItem(mBnImg.getCurrentItem() - 1)); + mIvImgRight.setOnClickListener(v -> mBnImg.setCurrentItem(mBnImg.getCurrentItem() + 1)); } /** @@ -1205,9 +1410,48 @@ public class NewsLocalDetailActivity extends BaseActivity { buttomDialogView.show(); } + + @Override + protected void onResume() { + super.onResume(); + if (mLlAudio.getVisibility() == View.VISIBLE) { + if (mAudio != null) { + mAudio.pause(); + } + } + if (mLlVideo.getVisibility() == View.VISIBLE) { + if (mVideo != null) { + mVideo.pause(); + } + } + } + + @Override + protected void onPause() { + super.onPause(); + if (mLlAudio.getVisibility() == View.VISIBLE) { + if (mAudio != null) { + mAudio.pause(); + } + } + if (mLlVideo.getVisibility() == View.VISIBLE) { + if (mVideo != null) { + mVideo.pause(); + } + } + } + @Override protected void onDestroy() { mContentView = null; + if (mAudio != null) { + mAudio.pause(); + mAudio.release(); + } + if (mVideo != null) { + mVideo.pause(); + mVideo.release(); + } if (mBind != null) { mBind.unbind(); } diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsMainActivity.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsMainActivity.java index 3e0965f..a8b16c0 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsMainActivity.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsMainActivity.java @@ -94,7 +94,7 @@ public class NewsMainActivity extends BaseActivity { if (newsTabBeans != null && newsTabBeans.size() > 0) { NewsTabBean allBean = new NewsTabBean(); allBean.setDirectoriesName("全部"); - allBean.setNewsDirectoriesId(""); + allBean.setNewsDirectoriesId(mPId); allBean.setDirectoriesParentId(mPId); allBean.setDirectoriesView("2"); newsTabBeans.add(0, allBean); @@ -103,6 +103,7 @@ public class NewsMainActivity extends BaseActivity { for (int i = 0; i < newsTabBeans.size(); i++) { Bundle bundle = new Bundle(); bundle.putString("type", newsTabBeans.get(i).getNewsDirectoriesId()); + bundle.putBoolean("isAll","全部".equals(newsTabBeans.get(i).getDirectoriesName())); bundle.putString("pId", ""); BaseFragment fragment = null; //0 外部链接 1存在子集 2没有子集 diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsSearchActivity.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsSearchActivity.java index 99246b4..59635a7 100644 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsSearchActivity.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/activitys/news/NewsSearchActivity.java @@ -142,45 +142,46 @@ public class NewsSearchActivity extends BaseActivity { * @param type */ private void showNewsDetail(NewsItemBean.RowsBean rowsBean, int type) { - String url = ""; - if ("6".equals(rowsBean.getNewsContentType())) { - ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_WEB) - .withString("title", rowsBean.getNewsContentTitle()) - .withString("url", rowsBean.getNewsContentContent()) - .navigation(); - } else { - int newsType = 0; - if (type == 1) { - //1自定义列表 - //3列表详情 - if ("1".equals(rowsBean.getNewsConfigWebSwitch())) { - //列表 - url = rowsBean.getTemplateRecordUrl(); - newsType = 0; - } else { - //内容 - url = rowsBean.getNewsConfigDescriptionText(); - newsType = 1; - } - } else { - newsType = 0; - url = rowsBean.getTemplateRecordUrl(); - } - ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) //TODO 连接 -// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE)//TODO 接口方式 - .withString("id", rowsBean.getNewsContentId()) - .withString("url", url) - .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 - .withString("isCommentImg", rowsBean.getNewsConfigCommentImage())//评论是否可以上传图片 - .withString("isCollect", rowsBean.getNewsContentCollectStatus()) - .withString("photo", - BaseUrlApi.BASE_NEWS_IMG_URL + rowsBean.getNewsContentCoverList().get(0).getContentCoverId()) - .withString("title", rowsBean.getNewsContentTitle()) - .withInt("type", newsType) - .navigation(); - } + ARouter.getInstance() +// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) //TODO 连接 + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE)//TODO 接口方式 + .withString("id", rowsBean.getNewsContentId()) + .withString("url", "") + .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 + .withString("isCommentImg", rowsBean.getNewsConfigCommentImage())//评论是否可以上传图片 + .withString("isCollect", rowsBean.getNewsContentCollectStatus()) + .withString("photo", + BaseUrlApi.BASE_NEWS_IMG_URL + rowsBean.getNewsContentCoverList().get(0).getContentCoverId()) + .withString("title", rowsBean.getNewsContentTitle()) + .withInt("type", 2) + .navigation(); +// String url = ""; +// if ("6".equals(rowsBean.getNewsContentType())) { +// ARouter.getInstance() +// .build(PathConfig.PATH_MODULE_MAIN_NEWS_WEB) +// .withString("title", rowsBean.getNewsContentTitle()) +// .withString("url", rowsBean.getNewsContentContent()) +// .navigation(); +// } else { +// int newsType = 0; +// if (type == 1) { +// //1自定义列表 +// //3列表详情 +// if ("1".equals(rowsBean.getNewsConfigWebSwitch())) { +// //列表 +// url = rowsBean.getTemplateRecordUrl(); +// newsType = 0; +// } else { +// //内容 +// url = rowsBean.getNewsConfigDescriptionText(); +// newsType = 1; +// } +// } else { +// newsType = 0; +// url = rowsBean.getTemplateRecordUrl(); +// } + +// } } /** diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/adapter/NewsAdapter.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/adapter/NewsAdapter.java index 2774ada..01b8232 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/adapter/NewsAdapter.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/adapter/NewsAdapter.java @@ -50,7 +50,7 @@ public class NewsAdapter extends BaseRecyclerAdapter { + + public NewsCategoryAdapter(Context ctx, List list) { + super(ctx, list); + } + + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public NewsCategoryHolder createHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_news_category, parent, false); + return new NewsCategoryHolder(itemView); + } + + @Override + public void bindHolder(NewsCategoryHolder h, int i) { + NewsDetailBean.FileListBean b = mData.get(i); + if (b.isCheck()) { + h.mTvName.setBackgroundResource(R.drawable.shape_red_line_ra_2); + } else { + h.mTvName.setBackgroundResource(0); + } + h.mTvName.setText(String.valueOf(i + 1)); + } + + +} diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/beans/NewsDetailBean.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/beans/NewsDetailBean.java index 0a06f9e..d85fda1 100644 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/beans/NewsDetailBean.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/beans/NewsDetailBean.java @@ -338,6 +338,8 @@ public class NewsDetailBean { private String contentFileText; private String newsContentFileId; private String newsContentId; + private boolean isCheck; + public String getContentFileFileId() { return contentFileFileId; @@ -378,6 +380,15 @@ public class NewsDetailBean { public void setNewsContentId(String newsContentId) { this.newsContentId = newsContentId; } + + + public boolean isCheck() { + return isCheck; + } + + public void setCheck(boolean check) { + isCheck = check; + } } public static class NewsContentCoverListBean { diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java index 36a2eb0..e9db19a 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/HomeFragment.java @@ -101,6 +101,10 @@ public class HomeFragment extends BaseFragment { // LinearLayout mLlMainNews; @BindView(R2.id.ll_news_content) LinearLayout mLlNewsContent; + @BindView(R2.id.rl_main_func) + RelativeLayout mRlMainFunc; + @BindView(R2.id.rl_commend) + RelativeLayout mRlCommend; private Unbinder mBind; private List mFuncBeans = new ArrayList<>(); private List mBannerList = new ArrayList<>(); @@ -109,11 +113,13 @@ public class HomeFragment extends BaseFragment { private NewsAdapter mMAdapter; private ViewSkeletonScreen mNewsSkeleton; private MainCommendAdapter mCommendAdapter; - private RecyclerViewSkeletonScreen mCommendSkeleton; private ViewSkeletonScreen mBannerSkeleton; private RecyclerViewSkeletonScreen mLiveSkeleton; private LiveAdapter mLiveAdapter; private BannerImageTextAdapter mBannerImageAdapter; + private ViewSkeletonScreen mFuncSkeleton; + private MainFuncAdapter mFuncAdapter; + private ViewSkeletonScreen mCommendSkeleton; @Override protected void setDataToView(View dataView) { @@ -182,10 +188,6 @@ public class HomeFragment extends BaseFragment { mNewsSkeleton = Skeleton.bind(mLlNewsContent) .load(R.layout.item_skeleton_news_content) .show(); - mCommendSkeleton = Skeleton.bind(mRlvCommend) - .adapter(mCommendAdapter) - .load(R.layout.item_skeleton_image) - .show(); mBannerSkeleton = Skeleton.bind(mBanner) .load(R.layout.item_skeleton_banner) @@ -195,6 +197,14 @@ public class HomeFragment extends BaseFragment { .count(5) .load(R.layout.item_skeleton_live_grid) .show(); + + mFuncSkeleton = Skeleton.bind(mRlMainFunc) + .load(R.layout.item_skeleton_main_func_grid) + .show(); + mCommendSkeleton = Skeleton.bind(mRlCommend) + .load(R.layout.item_skeleton_main_func_grid) + .show(); + buildMainFuncMenu(null); buildBannerData(); getMainFuncMenu();//获取首页功能按钮 @@ -214,7 +224,7 @@ public class HomeFragment extends BaseFragment { } else { if (!TextUtils.isEmpty(bean.getId())) { ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE) .withString("id", bean.getId()) .withString("url", bean.getUrl()) .withString("isComment", bean.getIsComment())//是否可以评论 @@ -278,6 +288,7 @@ public class HomeFragment extends BaseFragment { * 获取首页功能 */ private void getMainFuncMenu() { + mFuncSkeleton.show(); RetrofitManager.getInstance() .create(HomeApi.class) .getMainFunc() @@ -291,21 +302,21 @@ public class HomeFragment extends BaseFragment { @Override public void onNext(List newsTabBeans) { - if (newsTabBeans != null && newsTabBeans.size() > 0) { - buildMainFuncMenu(newsTabBeans); - } else { - - } + buildMainFuncMenu(newsTabBeans); } @Override public void onError(Throwable e) { e.printStackTrace(); + buildMainFuncMenu(null); } @Override public void onComplete() { mSrlView.finishRefresh(); + if (mFuncSkeleton != null) { + mFuncSkeleton.hide(); + } } }); } @@ -315,6 +326,9 @@ public class HomeFragment extends BaseFragment { * 3条场馆 3条活动 */ private void getMainCommendList() { + if (mCommendSkeleton != null) { + mCommendSkeleton.show(); + } Observable[] mObservales = new Observable[2]; Observable hot = RetrofitManager.getInstance() .create(HomeApi.class) @@ -387,6 +401,9 @@ public class HomeFragment extends BaseFragment { @Override public void onComplete() { mSrlView.finishRefresh(); + if (mCommendSkeleton != null) { + mCommendSkeleton.hide(); + } } }); @@ -479,8 +496,8 @@ public class HomeFragment extends BaseFragment { url = rowsBean.getTemplateRecordUrl(); } ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) //TODO 连接 -// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE)//TODO 接口方式 +// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) //TODO 连接 + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE)//TODO 接口方式 .withString("id", rowsBean.getNewsContentId()) .withString("url", url) .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 @@ -789,7 +806,9 @@ public class HomeFragment extends BaseFragment { */ private void buildMainFuncMenu(List list) { mFuncBeans.clear(); - + if (mFuncSkeleton != null) { + mFuncSkeleton.hide(); + } // MainFuncBean showBean = new MainFuncBean(); // showBean.setIconRes(R.drawable.ic_show_icon); @@ -836,12 +855,12 @@ public class HomeFragment extends BaseFragment { mFuncBeans.add(culturalBean); mFuncBeans.add(movieBean); - MainFuncAdapter funcAdapter = new MainFuncAdapter(getActivity(), mFuncBeans); + mFuncAdapter = new MainFuncAdapter(getActivity(), mFuncBeans); LinearLayoutManager manager = new LinearLayoutManager(mActivity, LinearLayoutManager.HORIZONTAL, false); mRlvMainFunc.setLayoutManager(manager); - mRlvMainFunc.setAdapter(funcAdapter); + mRlvMainFunc.setAdapter(mFuncAdapter); - funcAdapter.addOnItemClickListener(this::chooseFuncPage); + mFuncAdapter.addOnItemClickListener(this::chooseFuncPage); mRlvMainFunc.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/NewsFragment.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/NewsFragment.java index f44f9b0..98b23ed 100755 --- a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/NewsFragment.java +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/fragment/NewsFragment.java @@ -65,6 +65,7 @@ public class NewsFragment extends BaseFragment { private Disposable mD1; private Disposable mD2; private Disposable mDMenu; + private boolean mIsAll; @Override protected void setDataToView(View dataView) { @@ -73,6 +74,7 @@ public class NewsFragment extends BaseFragment { mAdapter = new NewsAdapter(mActivity, mNewsDatas); mType = getArguments().getString("type"); mPid = getArguments().getString("pId"); + mIsAll = getArguments().getBoolean("isAll"); mCurrentPage = 1; mTotalPage = 0; mNewsDatas.clear(); @@ -88,7 +90,9 @@ public class NewsFragment extends BaseFragment { .adapter(mAdapter) .load(R.layout.item_skeleton_news) .show(); - getNewsSubMenu(mType); + if (!mIsAll) { + getNewsSubMenu(mType); + } if (!TextUtils.isEmpty(UserLgUtils.getToken())) { getNewsListByTypeToken(mCurrentPage); @@ -137,8 +141,8 @@ public class NewsFragment extends BaseFragment { url = rowsBean.getTemplateRecordUrl(); } ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) -// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE) +// .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL)//TODO 详情模板 + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE)//TODO 接口方式 .withString("id", rowsBean.getNewsContentId()) .withString("url", url) .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 @@ -154,7 +158,7 @@ public class NewsFragment extends BaseFragment { private void getNewsListByTypeToken(int page) { RetrofitManager.getInstance() .create(HomeApi.class) - .getNewsListByToken(mType, "", page + "", UserLgUtils.getToken()) + .getNewsListByToken(mIsAll ? "" : mType, mIsAll ? mType : "", page + "", UserLgUtils.getToken()) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { @@ -172,24 +176,24 @@ public class NewsFragment extends BaseFragment { if (newsItemBean != null && newsItemBean.getRows().size() > 0) { mTotalPage = newsItemBean.getTotal(); getCommentCount(1, newsItemBean); -// mNewsDatas = newsItemBean.getRows(); +// mNewsDatas.addAll(newsItemBean.getRows()); // mAdapter.setData(mNewsDatas); -// setStateView(STATE_SUCCESS); + setStateView(STATE_SUCCESS); } else { setStateView(STATE_EMPTY); } - mSrlView.finishRefresh(); + } else { if (newsItemBean != null) { // mNewsDatas.addAll(newsItemBean.getRows()); // mAdapter.setData(mNewsDatas); getCommentCount(2, newsItemBean); - mSrlView.finishLoadMore(); } else { mSrlView.setNoMoreData(true); } } - + mSrlView.finishLoadMore(); + mSrlView.finishRefresh(); } @Override @@ -218,7 +222,6 @@ public class NewsFragment extends BaseFragment { * @param id */ private void getNewsSubMenu(String id) { - RetrofitManager.getInstance() .create(HomeApi.class) .getNewsTabListByPid(id) @@ -262,7 +265,7 @@ public class NewsFragment extends BaseFragment { private void getNewsListByType(int page) { RetrofitManager.getInstance() .create(HomeApi.class) - .getNewsList(mType, "", page + "") + .getNewsList(mIsAll ? "" : mType, mIsAll ? mType : "", page + "") .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer() { diff --git a/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/holder/NewsCategoryHolder.java b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/holder/NewsCategoryHolder.java new file mode 100755 index 0000000..681d633 --- /dev/null +++ b/modulemain/src/main/java/com/tengshisoft/mudulemain/cultural/holder/NewsCategoryHolder.java @@ -0,0 +1,24 @@ +package com.tengshisoft.mudulemain.cultural.holder; + +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.sucstepsoft.cm_utils.core.widget.views.TypeFaceTextView; +import com.tengshisoft.mudulemain.R; + +/** + * 作者: adam + * 日期: 2020/5/28 - 10:18 AM + * 邮箱: itgaojian@163.com + * 描述: + */ +public class NewsCategoryHolder extends RecyclerView.ViewHolder { + public TypeFaceTextView mTvName; + + public NewsCategoryHolder(@NonNull View itemView) { + super(itemView); + mTvName = itemView.findViewById(R.id.tv_category); + } +} diff --git a/modulemain/src/main/res/drawable-xhdpi/ic_audio_rotate_icon.png b/modulemain/src/main/res/drawable-xhdpi/ic_audio_rotate_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2b85d635f0fce2f8f3c2de93cf3e6c7ce2393d80 GIT binary patch literal 7531 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 DSMJE0 literal 0 HcmV?d00001 diff --git a/modulemain/src/main/res/drawable-xhdpi/ic_img_arrow_right.png b/modulemain/src/main/res/drawable-xhdpi/ic_img_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..bc942d54160ac2aa4aa7b0f1ea9913ed88b03d58 GIT binary patch literal 5340 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 Ui^QUZKbL=6>iTL`Dt1x-10|tvQ2+n{ literal 0 HcmV?d00001 diff --git a/modulemain/src/main/res/drawable/shape_white_line_ra_2.xml b/modulemain/src/main/res/drawable/shape_white_line_ra_2.xml new file mode 100755 index 0000000..bf9ad9b --- /dev/null +++ b/modulemain/src/main/res/drawable/shape_white_line_ra_2.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/modulemain/src/main/res/layout/activity_news_local_detail.xml b/modulemain/src/main/res/layout/activity_news_local_detail.xml index 814c367..b84c88d 100644 --- a/modulemain/src/main/res/layout/activity_news_local_detail.xml +++ b/modulemain/src/main/res/layout/activity_news_local_detail.xml @@ -97,16 +97,33 @@ android:layout_width="match_parent" android:layout_height="240dp" /> - + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:gravity="center_horizontal" + android:orientation="vertical"> + + + + + + android:visibility="gone" + tools:visibility="gone"> + + + + + android:visibility="gone" + tools:visibility="gone"> - + android:layout_height="240dp"> - + + + + + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:gravity="center_horizontal" + android:orientation="vertical"> + + + + + + android:layout_marginTop="10dp" + android:orientation="vertical" + android:paddingLeft="10dp" + android:paddingRight="10dp"> + @@ -93,6 +94,7 @@ android:background="@color/gray_line" /> diff --git a/modulemain/src/main/res/layout/fragment_news.xml b/modulemain/src/main/res/layout/fragment_news.xml index 7fe1cce..daf69b3 100755 --- a/modulemain/src/main/res/layout/fragment_news.xml +++ b/modulemain/src/main/res/layout/fragment_news.xml @@ -1,6 +1,5 @@ - + android:layout_height="match_parent" + android:fillViewport="true"> - + + + + + + + \ No newline at end of file diff --git a/modulemain/src/main/res/layout/item_news_category.xml b/modulemain/src/main/res/layout/item_news_category.xml new file mode 100644 index 0000000..c7f4f9d --- /dev/null +++ b/modulemain/src/main/res/layout/item_news_category.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/modulemain/src/main/res/layout/item_skeleton_main_func_grid.xml b/modulemain/src/main/res/layout/item_skeleton_main_func_grid.xml new file mode 100755 index 0000000..cebf4d0 --- /dev/null +++ b/modulemain/src/main/res/layout/item_skeleton_main_func_grid.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modulemine/src/main/java/com/tengshisoft/modulemine/activity/CollectActivity.java b/modulemine/src/main/java/com/tengshisoft/modulemine/activity/CollectActivity.java index c4084cd..ec4bbb5 100755 --- a/modulemine/src/main/java/com/tengshisoft/modulemine/activity/CollectActivity.java +++ b/modulemine/src/main/java/com/tengshisoft/modulemine/activity/CollectActivity.java @@ -92,7 +92,7 @@ public class CollectActivity extends BaseActivity { url = rowsBean.getTemplateRecordUrl(); } ARouter.getInstance() - .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL) + .build(PathConfig.PATH_MODULE_MAIN_NEWS_DETAIL_INTERFACE) .withString("id", rowsBean.getNewsContentId()) .withString("url", url) .withString("isComment", rowsBean.getNewsConfigComment())//是否可以评论 diff --git a/moduleplace/src/main/java/com/tengshisoft/moduleplace/adapter/PlaceFuncAdapter.java b/moduleplace/src/main/java/com/tengshisoft/moduleplace/adapter/PlaceFuncAdapter.java index 1e34857..cefb008 100755 --- a/moduleplace/src/main/java/com/tengshisoft/moduleplace/adapter/PlaceFuncAdapter.java +++ b/moduleplace/src/main/java/com/tengshisoft/moduleplace/adapter/PlaceFuncAdapter.java @@ -6,6 +6,7 @@ import android.view.View; import android.view.ViewGroup; import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.sucstepsoft.cm_utils.core.retrofit_net.BaseUrlApi; import com.sucstepsoft.cm_utils.core.widget.base.BaseRecyclerAdapter; import com.tengshisoft.moduleplace.R; @@ -36,6 +37,7 @@ public class PlaceFuncAdapter extends BaseRecyclerAdapter + android:orientation="horizontal" + android:padding="5dp"> - + android:layout_height="match_parent" + android:fillViewport="true"> + + +