() {
@Override
public void onError(Call call, Exception e) {
e.printStackTrace();
}
@Override
public void onResponse(ZhihuDetails response, String json) {
if (response != null && mCache.isNewResponse(url, json)) {
mTopDetails = response;
mCache.put(url, json);
initAppBarLayout();
loadWebView();
}
}
});
}
private void initAppBarLayout() {
ImageUtil.getInstance().displayImage(mTopDetails.getImage(), mTitleImageView);
mTitleCollapsingToolbarLayout.setTitle(mTopDetails.getTitle());
}
private void loadWebView() {
String css = "";
String html = "" + css + "" + mTopDetails.getBody() + "";
html = html.replace("", "");
mContentWebView.loadDataWithBaseURL("x-data://base", html, "text/html", "UTF-8", null);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mContentWebView != null) {
mContentWebView.removeAllViews();
mContentWebView.destroy();
}
}
@Override
protected void onPause() {
super.onPause();
if (mContentWebView != null) {
mContentWebView.onPause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mContentWebView != null) {
mContentWebView.onResume();
}
}
@Override
public void onStateChange(int state) {
if (state == RevealBackgroundView.STATE_NOT_STARTED) {
mContentNestedScrollView.setVisibility(View.GONE);
mContentAppBarLayout.setVisibility(View.GONE);
}
if (state == RevealBackgroundView.STATE_FINISHED) {
mContentNestedScrollView.setVisibility(View.VISIBLE);
mContentAppBarLayout.setVisibility(View.VISIBLE);
}
}
}
知乎接口返回的 json 数据中,包含了页面的 css 样式,而且这个样式是固定的,所以我们完全可以将它写入到本地文件中,css 样式代码如下我就不给了,可以在 json 数据中查看,或者在项目的 app->src->main->assets->css->news 中查看。然后在 webview 加载中将它引入即可。
解决掉后三个点击事件,我们就剩下前面 GankFragment 两个点击事件了,其中,视频跳转我直接启用了系统的页面,具体代码可以直接看上面了,我就不做过多的解释,在后期的迭代中,将会考虑使用 webview 来加载。
最后就是我们的 PictureActivity 了,代码如下:
public class PictureActivity extends BaseActivity implements View.OnClickListener {
public static final String EXTRA_IMAGE_URL = "image_url";
public static final String EXTRA_IMAGE_TITLE = "image_title";
public static final String TRANSIT_PIC = "picture";
private String mImageUrl;
private String mName;
private ImageView mPicImageView;
private Toolbar mTitleToolbar;
public static Intent newIntent(Context context, String url, String desc) {
Intent intent = new Intent(context, PictureActivity.class);
intent.putExtra(PictureActivity.EXTRA_IMAGE_URL, url);
intent.putExtra(PictureActivity.EXTRA_IMAGE_TITLE, desc);
return intent;
}
@TargetApi(Build.VERSION_CODES.KITKAT)
@Override
protected void initView(Bundle savedInstanceState) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
setContentView(R.layout.activity_picture);
mTitleToolbar = (Toolbar) findViewById(R.id.tb_title);
mPicImageView = (ImageView) findViewById(R.id.iv_pic);
mTitleToolbar.setNavigationOnClickListener(this);
setSupportActionBar(mTitleToolbar);
final ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(true);
mPicImageView.setOnClickListener(this);
ViewCompat.setTransitionName(mPicImageView, TRANSIT_PIC);
}
@Override
protected void initData() {
super.initData();
parseIntent();
getSupportActionBar().setTitle(mName);
loadPic(mImageUrl, mPicImageView);
}
private void parseIntent() {
mImageUrl = getIntent().getStringExtra(EXTRA_IMAGE_URL);
mName = getIntent().getStringExtra(EXTRA_IMAGE_TITLE);
}
private void loadPic(String imageUrl, ImageView imageView) {
ImageUtil.getInstance().displayImage(imageUrl, imageView);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.iv_pic:
changeToolbar();
break;
default:
break;
}
}
private void changeToolbar() {
if (mTitleToolbar.isShown()) {
mTitleToolbar.setVisibility(View.INVISIBLE);
} else {
mTitleToolbar.setVisibility(View.VISIBLE);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_picture, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.menu_save:
ImageUtil.getInstance().saveImage(this, mName, mImageUrl);
return true;
case R.id.menu_share:
LazyUtil.showToast("暂时不支持分享功能哦");
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
简单地解释一下:从 MainActivity 中传入图片的 url,然后在 PictureActivity 中解析 intent,获取到传过来的图片的 url 直接使用 U-I-L 来显示该图片即可。至此,v1.0 版本的干乎教程就到此结束了,大致内容我都已经讲解了,如果还有任何问题,欢迎提出 [issure](https://github.com/jokerZLemon/GankOr/issues),我一定会热心解答。
至此,感谢所有支持干乎的朋友们,接下来我将进行干乎 v1.1 版本的升级。