diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f7db56a..e2b8090 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,6 +78,7 @@
+
() {
+ @Override
+ public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition super Bitmap> transition) {
+ int imgWidth = resource.getWidth();
+ int imgHeight = resource.getHeight();
+ iv_img.setImageBitmap(resource);
+ Log.e("into", "onResourceReady: width = " + imgWidth + "height = " + imgHeight);
+ ViewGroup.LayoutParams layoutParams = iv_img.getLayoutParams();
+ int width = iv_img.getWidth();
+ layoutParams.height = (int) (imgHeight * (1.0f * width /imgWidth ));
+ iv_img.setLayoutParams(layoutParams);
+ }
+
+ @Override
+ public void onLoadCleared(@Nullable Drawable placeholder) {
+
+ }
+ });
+ }
+
+ @Override
+ public void initData() {
+
+ }
+}
diff --git a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java b/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java
index 6fd7d09..cc1ecf1 100644
--- a/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java
+++ b/app/src/main/java/com/uiuios/aios/activity/InfoListActivity.java
@@ -1,21 +1,101 @@
package com.uiuios.aios.activity;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.trello.rxlifecycle4.RxLifecycle;
+import com.trello.rxlifecycle4.android.ActivityEvent;
+import com.trello.rxlifecycle4.android.FragmentEvent;
import com.uiuios.aios.R;
+import com.uiuios.aios.adapter.ArticleAdapter;
import com.uiuios.aios.base.BaseActivity;
+import com.uiuios.aios.bean.ArticleInfo;
+import com.uiuios.aios.bean.BaseResponse;
+import com.uiuios.aios.network.NetInterfaceManager;
+import com.zackratos.ultimatebarx.ultimatebarx.java.UltimateBarX;
+
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+import io.reactivex.rxjava3.annotations.NonNull;
+import io.reactivex.rxjava3.core.Observer;
+import io.reactivex.rxjava3.disposables.Disposable;
public class InfoListActivity extends BaseActivity {
+ @BindView(R.id.iv_back)
+ ImageView iv_back;
+ @BindView(R.id.iv1)
+ ImageView iv1;
+ @BindView(R.id.recyclerView)
+ RecyclerView recyclerView;
+
+ private ArticleAdapter mArticleAdapter;
+
@Override
public int getLayoutId() {
+ UltimateBarX.statusBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(true)
+ .apply();
+ UltimateBarX.navigationBar(this)
+ .transparent()
+ .colorRes(R.color.colorPrimaryDark)
+ .light(true)
+ .apply();
return R.layout.activity_info_list;
}
@Override
public void initView() {
-
+ ButterKnife.bind(this);
+ mArticleAdapter = new ArticleAdapter();
+ recyclerView.setLayoutManager(new LinearLayoutManager(this));
+ recyclerView.setAdapter(mArticleAdapter);
+ iv_back.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ finish();
+ }
+ });
}
@Override
public void initData() {
+ NetInterfaceManager.getInstance().getArticleListObservable()
+ .compose(RxLifecycle.bindUntilEvent(lifecycleSubject, ActivityEvent.DESTROY))
+ .subscribe(new Observer>>() {
+ @Override
+ public void onSubscribe(@NonNull Disposable d) {
+ Log.e("getArticle", "onSubscribe: ");
+ }
+ @Override
+ public void onNext(@NonNull BaseResponse> listBaseResponse) {
+ Log.e("getArticle", "onNext: " + listBaseResponse);
+ List articleInfoList = listBaseResponse.data;
+ if (articleInfoList != null && articleInfoList.size() != 0) {
+ iv1.setVisibility(android.view.View.GONE);
+ mArticleAdapter.setArticleBeanList(articleInfoList);
+ } else {
+ iv1.setVisibility(android.view.View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onError(@NonNull Throwable e) {
+ Log.e("getArticle", "onError: " + e.getMessage());
+ }
+
+ @Override
+ public void onComplete() {
+ Log.e("getArticle", "onComplete: ");
+ }
+ });
}
}
diff --git a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java
index d9a7e70..93b57fe 100644
--- a/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java
+++ b/app/src/main/java/com/uiuios/aios/adapter/ArticleAdapter.java
@@ -1,10 +1,10 @@
package com.uiuios.aios.adapter;
import android.content.Context;
+import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.shehuan.niv.NiceImageView;
import com.uiuios.aios.R;
+import com.uiuios.aios.activity.ArticleActivity;
import com.uiuios.aios.bean.ArticleInfo;
import java.util.List;
@@ -40,6 +41,14 @@ public class ArticleAdapter extends RecyclerView.Adapter
Glide.with(holder.iv_img).load(articleInfo.getImg()).into(holder.iv_img);
holder.tv_title.setText(articleInfo.getTitle());
holder.tv_content.setText(articleInfo.getContent());
+ holder.tv_read.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Intent intent = new Intent(mContext, ArticleActivity.class);
+ intent.putExtra("ArticleInfo", articleInfo);
+ mContext.startActivity(intent);
+ }
+ });
}
@Override
@@ -49,13 +58,16 @@ public class ArticleAdapter extends RecyclerView.Adapter
class Holder extends RecyclerView.ViewHolder {
NiceImageView iv_img;
- TextView tv_title, tv_content;
+ TextView tv_title;
+ TextView tv_content;
+ TextView tv_read;
public Holder(@NonNull View itemView) {
super(itemView);
iv_img = itemView.findViewById(R.id.iv_img);
tv_title = itemView.findViewById(R.id.tv_title);
tv_content = itemView.findViewById(R.id.tv_content);
+ tv_read = itemView.findViewById(R.id.tv_read);
}
}
}
diff --git a/app/src/main/java/com/uiuios/aios/view/ExpandTextView.java b/app/src/main/java/com/uiuios/aios/view/ExpandTextView.java
new file mode 100644
index 0000000..cb14e1e
--- /dev/null
+++ b/app/src/main/java/com/uiuios/aios/view/ExpandTextView.java
@@ -0,0 +1,135 @@
+package com.uiuios.aios.view;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.text.Layout;
+import android.text.StaticLayout;
+import android.util.AttributeSet;
+
+import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatTextView;
+
+public class ExpandTextView extends AppCompatTextView {
+ /**
+ * true:展开,false:收起
+ */
+ boolean mExpanded;
+ /**
+ * 状态回调
+ */
+ Callback mCallback;
+ /**
+ * 源文字内容
+ */
+ String mText = "";
+ /**
+ * 最多展示的行数
+ */
+ final int maxLineCount = 3;
+ /**
+ * 省略文字
+ */
+ final String ellipsizeText = "...";
+
+ public ExpandTextView(Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ // 文字计算辅助工具
+ StaticLayout sl = new StaticLayout(mText, getPaint(), getMeasuredWidth() - getPaddingLeft() - getPaddingRight()
+ , Layout.Alignment.ALIGN_CENTER, 1, 0, true);
+ // 总计行数
+ int lineCount = sl.getLineCount();
+ if (lineCount > maxLineCount) {
+ if (mExpanded) {
+ setText(mText);
+ mCallback.onExpand();
+ } else {
+ lineCount = maxLineCount;
+
+ // 省略文字的宽度
+ float dotWidth = getPaint().measureText(ellipsizeText);
+
+ // 找出第 showLineCount 行的文字
+ int start = sl.getLineStart(lineCount - 1);
+ int end = sl.getLineEnd(lineCount - 1);
+ String lineText = mText.substring(start, end);
+
+ // 将第 showLineCount 行最后的文字替换为 ellipsizeText
+ int endIndex = 0;
+ for (int i = lineText.length() - 1; i >= 0; i--) {
+ String str = lineText.substring(i, lineText.length());
+ // 找出文字宽度大于 ellipsizeText 的字符
+ if (getPaint().measureText(str) >= dotWidth) {
+ endIndex = i;
+ break;
+ }
+ }
+
+ // 新的第 showLineCount 的文字
+ String newEndLineText = lineText.substring(0, endIndex) + ellipsizeText;
+ // 最终显示的文字
+ setText(mText.substring(0, start) + newEndLineText);
+
+ mCallback.onCollapse();
+ }
+ } else {
+ setText(mText);
+ mCallback.onLoss();
+ }
+
+ // 重新计算高度
+ int lineHeight = 0;
+ for (int i = 0; i < lineCount; i++) {
+ Rect lineBound = new Rect();
+ sl.getLineBounds(i, lineBound);
+ lineHeight += lineBound.height();
+ }
+ lineHeight += getPaddingTop() + getPaddingBottom();
+ setMeasuredDimension(getMeasuredWidth(), lineHeight);
+ }
+
+ /**
+ * 设置要显示的文字以及状态
+ * @param text
+ * @param expanded true:展开,false:收起
+ * @param callback
+ */
+ public void setText(String text, boolean expanded, Callback callback) {
+ mText = text;
+ mExpanded = expanded;
+ mCallback = callback;
+
+ // 设置要显示的文字,这一行必须要,否则 onMeasure 宽度测量不正确
+ setText(text);
+ }
+
+ /**
+ * 展开收起状态变化
+ * @param expanded
+ */
+ public void setChanged(boolean expanded) {
+ mExpanded = expanded;
+ requestLayout();
+ }
+
+ public interface Callback {
+ /**
+ * 展开状态
+ */
+ void onExpand();
+
+ /**
+ * 收起状态
+ */
+ void onCollapse();
+
+ /**
+ * 行数小于最小行数,不满足展开或者收起条件
+ */
+ void onLoss();
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_articl.xml b/app/src/main/res/layout/activity_articl.xml
new file mode 100644
index 0000000..30f8c74
--- /dev/null
+++ b/app/src/main/res/layout/activity_articl.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_info_list.xml b/app/src/main/res/layout/activity_info_list.xml
index 8903711..b4942bb 100644
--- a/app/src/main/res/layout/activity_info_list.xml
+++ b/app/src/main/res/layout/activity_info_list.xml
@@ -1,10 +1,102 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ android:layout_height="0dp"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/tabLayout" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_article.xml b/app/src/main/res/layout/item_article.xml
index 15f0fcb..3a135eb 100644
--- a/app/src/main/res/layout/item_article.xml
+++ b/app/src/main/res/layout/item_article.xml
@@ -35,13 +35,13 @@
android:layout_height="0dp"
android:text="中医专家谈寒露养生 “晨饮盐水晚喝蜂蜜”更健康"
android:textSize="@dimen/sp_9"
- app:layout_constraintBottom_toTopOf="@+id/tv_buying"
+ app:layout_constraintBottom_toTopOf="@+id/tv_read"
app:layout_constraintEnd_toEndOf="@+id/tv_title"
app:layout_constraintStart_toStartOf="@+id/tv_title"
app:layout_constraintTop_toBottomOf="@+id/tv_title" />