之前写的高仿知乎日报的代码是用eclipse写的,导入AndroidStudio之后虽然改改也能跑起来,但是格式很怪异,而且由于时间长了,很多东西都忘了,所以准备用AndroidStudio重写一遍,顺便记录下过程并将很多需要优化的地方都完成。
首先是接口的获取,不需要自己去抓包分析,因为已经有人分析过了:
知乎日报接口
既然接口都有了,那就装上知乎日报app照着搞呗。
1.首先编写Application,由于使用到了UIL框架,所以在Application中初始化它。
package krelve.app.kuaihu;
import android.app.Application;
import android.content.Context;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
/**
* Created by wwjun.wang on 2015/8/11.
*/
public class Kpplication extends Application {
@Override
public void onCreate() {
super.onCreate();
initImageLoader(getApplicationContext());
}
private void initImageLoader(Context context) {
File cacheDir = StorageUtils.getCacheDirectory(context);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
context).threadPoolSize(3)
.threadPriority(Thread.NORM_PRIORITY - 2)
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.tasksProcessingOrder(QueueProcessingType.LIFO)
.diskCache(new UnlimitedDiskCache(cacheDir)).writeDebugLogs()
.build();
ImageLoader.getInstance().init(config);
}
}
2.打开知乎日报,发现会有一个启动页,包含一个放大图片的动画,实现起来很简单:
简单的布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical">
<ImageView
android:id="@+id/iv_start"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
</RelativeLayout>
界面代码
package krelve.app.kuaihu.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Window;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.BinaryHttpResponseHandler;
import org.apache.http.Header;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import krelve.app.kuaihu.R;
import krelve.app.kuaihu.util.Constant;
import krelve.app.kuaihu.util.HttpUtils;
/**
* Created by wwjun.wang on 2015/8/11.
*/
public class SplashActivity extends Activity {
private ImageView iv_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.splash);
iv_start = (ImageView) findViewById(R.id.iv_start);
initImage();
}
private void initImage() {
File dir = getFilesDir();
final File imgFile = new File(dir, "start.jpg");
if (imgFile.exists()) {
iv_start.setImageBitmap(BitmapFactory.decodeFile(imgFile.getAbsolutePath()));
} else {
iv_start.setImageResource(R.mipmap.start);
}
final ScaleAnimation scaleAnim = new ScaleAnimation(1.0f,