Skip to content

Commit 911781d

Browse files
committed
【完成】重构博文界面、评论界面
添加图片浏览界面(未完成)
1 parent cea8b3e commit 911781d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+789
-64
lines changed

TodoList.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
> 2017-02-06
22
3-
- [ ] 内容界面角标显示优化
4-
- [ ] 知识库点赞接口实现
3+
- [x] 内容界面角标显示优化
4+
- [x] 知识库点赞接口实现
55

6+
- [ ] 我的界面
7+
- [ ] 博主界面
68

79
> 2017-01-22 接口TODO
810

app/build.gradle

+2
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,6 @@ dependencies {
6868
// 滑动返回
6969
compile 'me.imid.swipebacklayout.lib:library:1.0.0'
7070
compile 'com.android.support:multidex:1.0.0'
71+
compile 'com.github.chrisbanes.photoview:library:1.2.4'
72+
compile 'com.github.Cutta:GifView:1.1'
7173
}

app/src/main/AndroidManifest.xml

+1
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@
7777
<activity
7878
android:name=".activity.WebActivity"/>
7979
<activity android:name=".activity.WebLoginActivity"/>
80+
<activity android:name=".activity.ImagePreviewActivity"/>
8081

8182

8283
<meta-data

app/src/main/java/com/rae/cnblogs/AppRoute.java

+5
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import android.net.Uri;
77

88
import com.rae.cnblogs.activity.BlogContentActivity;
9+
import com.rae.cnblogs.activity.ImagePreviewActivity;
910
import com.rae.cnblogs.activity.LoginActivity;
1011
import com.rae.cnblogs.activity.MainActivity;
1112
import com.rae.cnblogs.activity.WebActivity;
@@ -85,4 +86,8 @@ public static void jumpToWebLogin(Activity context) {
8586
public static void jumpToUserCenter(Context context) {
8687

8788
}
89+
90+
public static void jumpToImagePreview(Context context) {
91+
startActivity(context, ImagePreviewActivity.class);
92+
}
8893
}

app/src/main/java/com/rae/cnblogs/activity/BlogContentActivity.java

+30-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.os.Bundle;
44
import android.support.annotation.Nullable;
5+
import android.support.v4.app.Fragment;
56
import android.support.v4.app.FragmentTransaction;
67
import android.support.v7.widget.Toolbar;
78
import android.text.TextUtils;
@@ -24,6 +25,8 @@
2425

2526
import org.greenrobot.eventbus.EventBus;
2627

28+
import java.util.List;
29+
2730
import butterknife.BindView;
2831
import butterknife.OnClick;
2932

@@ -88,22 +91,29 @@ protected void onViewSourceClick() {
8891
};
8992

9093

91-
ImageLoader.getInstance().displayImage(mBlog.getAvatar(), mAvatarView, RaeImageLoader.headerOption());
92-
mAuthorView.setText(mBlog.getAuthor());
93-
// 角标处理
94+
// 评论角标
9495
if (!TextUtils.equals(mBlog.getComment(), "0")) {
9596
mCommentBadgeView.setText(mBlog.getComment());
97+
mCommentBadgeView.setSelected(true);
9698
mCommentBadgeView.setVisibility(View.VISIBLE);
9799
}
100+
101+
// 点赞角标
98102
if (!TextUtils.equals(mBlog.getLikes(), "0")) {
99103
mLikeBadgeView.setText(mBlog.getLikes());
104+
mLikeBadgeView.setBackgroundResource(R.drawable.ic_like_content_badge);
100105
mLikeBadgeView.setVisibility(View.VISIBLE);
101106
}
102107

103108
// 知识库没有评论处理
104109
if (blogType == BlogType.KB) {
105110
mPostCommentView.setVisibility(View.GONE);
106111
mViewCommentView.setVisibility(View.GONE);
112+
mAuthorView.setVisibility(View.GONE);
113+
mAvatarView.setVisibility(View.GONE);
114+
} else {
115+
ImageLoader.getInstance().displayImage(mBlog.getAvatar(), mAvatarView, RaeImageLoader.headerOption());
116+
mAuthorView.setText(mBlog.getAuthor());
107117
}
108118

109119

@@ -133,6 +143,23 @@ public void onEditCommentClick() {
133143
EventBus.getDefault().post(new EditCommentEvent());
134144
}
135145

146+
@OnClick(R.id.tool_bar)
147+
public void onActionBarClick() {
148+
List<Fragment> fragments = getSupportFragmentManager().getFragments();
149+
if (fragments == null || fragments.size() < 1) {
150+
return;
151+
}
152+
153+
if (mCommentLayout.getVisibility() == View.VISIBLE) {
154+
BlogCommentFragment fragment = (BlogCommentFragment) fragments.get(0);
155+
fragment.scrollToTop();
156+
} else {
157+
BlogContentFragment fragment = (BlogContentFragment) fragments.get(1);
158+
fragment.scrollToTop();
159+
}
160+
161+
}
162+
136163

137164
// 返回键处理
138165
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package com.rae.cnblogs.activity;
2+
3+
import android.os.Bundle;
4+
import android.support.annotation.Nullable;
5+
import android.support.v4.view.ViewPager;
6+
import android.widget.TextView;
7+
8+
import com.rae.cnblogs.R;
9+
import com.rae.cnblogs.fragment.ImagePreviewFragment;
10+
import com.rae.core.fm.RaeFragmentAdapter;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.Locale;
15+
16+
import butterknife.BindView;
17+
import butterknife.ButterKnife;
18+
import butterknife.OnClick;
19+
20+
/**
21+
* 图片预览
22+
* Created by ChenRui on 2017/2/6 0006 15:48.
23+
*/
24+
public class ImagePreviewActivity extends BaseActivity implements ViewPager.OnPageChangeListener {
25+
26+
@BindView(R.id.vp_image_preview)
27+
ViewPager mViewPager;
28+
29+
@BindView(R.id.tv_image_preview_count)
30+
TextView mCountView;
31+
32+
@Override
33+
protected void onCreate(@Nullable Bundle savedInstanceState) {
34+
super.onCreate(savedInstanceState);
35+
setContentView(R.layout.activity_image_preview);
36+
ButterKnife.bind(this);
37+
38+
RaeFragmentAdapter adapter = new RaeFragmentAdapter(getSupportFragmentManager());
39+
40+
List<String> data = new ArrayList<>();
41+
42+
data.add("http://img05.tooopen.com/images/20150201/sl_109938035874.jpg");
43+
data.add("http://img.mp.itc.cn/upload/20161006/d750ecd3543546da8d31af9c458b9604.jpg"); // GIF
44+
data.add("http://img.mp.itc.cn/upload/20161006/b744756568ae4c04ab0b5e92d1073a7d.jpg"); // GIF
45+
data.add("http://img.mp.itc.cn/upload/20161006/9019a97229104f14be39efafd0a1db78.jpg"); // GIF
46+
data.add("http://img.mp.itc.cn/upload/20161006/f26de6acf09b4683910cbc4b2dc40290.jpg"); // GIF
47+
data.add("http://img04.tooopen.com/thumbnails/20130712/x_17270713.jpg");
48+
data.add("http://img04.tooopen.com/thumbnails/20130701/x_20083555.jpg");
49+
data.add("http://img06.tooopen.com/images/20170123/tooopen_sl_197478145926.jpg");
50+
data.add("http://img02.tooopen.com/images/20141229/sl_107003776898.jpg");
51+
data.add("http://img06.tooopen.com/images/20170123/tooopen_sl_197475962817.jpg");
52+
53+
54+
for (String url : data) {
55+
adapter.add(ImagePreviewFragment.newInstance(url));
56+
}
57+
58+
59+
mViewPager.setAdapter(adapter);
60+
61+
62+
if (adapter.getCount() > 1) {
63+
mViewPager.addOnPageChangeListener(this);
64+
onPageSelected(mViewPager.getCurrentItem());
65+
}
66+
67+
}
68+
69+
@OnClick(R.id.img_back)
70+
public void onBackClick() {
71+
finish();
72+
}
73+
74+
@Override
75+
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
76+
77+
}
78+
79+
@Override
80+
public void onPageSelected(int position) {
81+
position++;
82+
mCountView.setText(String.format(Locale.getDefault(), "%d/%d", position, mViewPager.getAdapter().getCount()));
83+
}
84+
85+
@Override
86+
public void onPageScrollStateChanged(int state) {
87+
88+
}
89+
}

app/src/main/java/com/rae/cnblogs/activity/MainActivity.java

+8
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,18 @@ public void onTabUnselected(TabLayout.Tab tab) {
6868

6969
@Override
7070
public void onTabReselected(TabLayout.Tab tab) {
71+
72+
// 首页
7173
if (tab.getPosition() == 0) {
7274
HomeFragment fragment = (HomeFragment) mFragmentAdapter.getItem(0);
7375
fragment.onLogoClick();
7476
}
77+
78+
// 新闻
79+
if (tab.getPosition() == 1 || tab.getPosition() == 2) {
80+
BlogTypeListFragment fragment = (BlogTypeListFragment) mFragmentAdapter.getItem(tab.getPosition());
81+
fragment.scrollToTop();
82+
}
7583
}
7684
});
7785
}

app/src/main/java/com/rae/cnblogs/activity/TestActivity.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,9 @@ void onJumpToMain() {
101101
@OnClick(R.id.btn_test_login)
102102
void onJumpToLogin() {
103103
// AppRoute.jumpToWebLogin(this);
104-
AppRoute.jumpToLogin(this);
104+
// AppRoute.jumpToLogin(this);
105+
106+
AppRoute.jumpToImagePreview(this);
105107
}
106108

107109
@OnLongClick(R.id.btn_test_dialog)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.rae.cnblogs.adapter;
2+
3+
import android.graphics.Bitmap;
4+
import android.graphics.BitmapFactory;
5+
import android.support.v4.view.PagerAdapter;
6+
import android.text.TextUtils;
7+
import android.util.Log;
8+
import android.view.LayoutInflater;
9+
import android.view.View;
10+
import android.view.ViewGroup;
11+
12+
import com.nostra13.universalimageloader.core.ImageLoader;
13+
import com.nostra13.universalimageloader.core.assist.FailReason;
14+
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
15+
import com.rae.cnblogs.R;
16+
import com.rae.cnblogs.RaeImageLoader;
17+
import com.rae.cnblogs.model.ImagePreviewHolder;
18+
import com.rae.core.Rae;
19+
20+
import java.io.File;
21+
import java.io.FileInputStream;
22+
import java.io.FileNotFoundException;
23+
import java.util.ArrayList;
24+
import java.util.List;
25+
26+
/**
27+
* 预览图适配器
28+
* Created by ChenRui on 2017/2/6 0006 15:51.
29+
*/
30+
public class ImagePreviewAdapter extends PagerAdapter implements ImageLoadingListener {
31+
32+
private final List<String> mDataList = new ArrayList<>();
33+
34+
35+
@Override
36+
public int getCount() {
37+
return Rae.getCount(mDataList);
38+
}
39+
40+
public void addItem(String url) {
41+
mDataList.add(url);
42+
}
43+
44+
@Override
45+
public boolean isViewFromObject(View view, Object object) {
46+
return view == object;
47+
}
48+
49+
@Override
50+
public void destroyItem(View container, int position, Object object) {
51+
((ViewGroup) container).removeView((View) object);
52+
}
53+
54+
@Override
55+
public void destroyItem(ViewGroup container, int position, Object object) {
56+
container.removeView((View) object);
57+
}
58+
59+
@Override
60+
public Object instantiateItem(View container, int position) {
61+
View view = LayoutInflater.from(container.getContext()).inflate(R.layout.item_image_preview, (ViewGroup) container, false);
62+
ImagePreviewHolder holder = new ImagePreviewHolder(view);
63+
((ViewGroup) container).addView(view);
64+
65+
ImageLoader.getInstance().displayImage(mDataList.get(position), holder.mImageView, RaeImageLoader.fadeOptions(300).build(), this);
66+
return view;
67+
68+
}
69+
70+
71+
@Override
72+
public void onLoadingStarted(String imageUri, View view) {
73+
74+
}
75+
76+
@Override
77+
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
78+
79+
}
80+
81+
@Override
82+
public void onLoadingComplete(String imageUri, View view, Bitmap bitmap) {
83+
// 获取图片类型,获取本地保存的路径
84+
try {
85+
File file = ImageLoader.getInstance().getDiskCache().get(imageUri);
86+
if (file == null) return;
87+
88+
BitmapFactory.Options opts = new BitmapFactory.Options();
89+
BitmapFactory.decodeStream(new FileInputStream(file), null, opts);
90+
91+
if (!TextUtils.isEmpty(opts.outMimeType) && opts.outMimeType.contains("gif")) {
92+
93+
}
94+
95+
Log.w("rae", "文件路径:" + file + ";类型:" + opts.outMimeType);
96+
} catch (FileNotFoundException e) {
97+
e.printStackTrace();
98+
}
99+
100+
}
101+
102+
@Override
103+
public void onLoadingCancelled(String imageUri, View view) {
104+
105+
}
106+
}

app/src/main/java/com/rae/cnblogs/fragment/BaseFragment.java

+5
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,13 @@ public abstract class BaseFragment extends Fragment {
1919
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
2020
View view = inflater.inflate(getLayoutId(), container, false);
2121
ButterKnife.bind(this, view);
22+
onCreateView(view);
2223
return view;
2324
}
2425

26+
protected void onCreateView(View view) {
27+
28+
}
29+
2530
protected abstract int getLayoutId();
2631
}

app/src/main/java/com/rae/cnblogs/fragment/BlogCommentFragment.java

+14
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.os.Bundle;
44
import android.support.annotation.Nullable;
5+
import android.support.v7.widget.LinearLayoutManager;
56
import android.view.MotionEvent;
67
import android.view.View;
78

@@ -256,4 +257,17 @@ public void onPostComment(String content, BlogComment parent, boolean isReferenc
256257
mCommentPresenter.post(parent);
257258
mEditCommentDialog.dismiss();
258259
}
260+
261+
262+
/**
263+
* 滚动到顶部
264+
*/
265+
public void scrollToTop() {
266+
if (mRecyclerView == null) return;
267+
LinearLayoutManager manager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
268+
if (manager.findFirstVisibleItemPosition() <= 1) {
269+
return;
270+
}
271+
mRecyclerView.smoothScrollToPosition(0);
272+
}
259273
}

0 commit comments

Comments
 (0)