框架解析

package com.yujiankang.gson;


import android.os.Bundle;
import android.support.v4.util.LruCache;
import android.util.Log;


import org.xutils.x;
import org.xutils.common.util.DensityUtil;
import org.xutils.image.ImageOptions;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;


import com.android.volley.RequestQueue;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.ImageLoader.ImageCache;
import com.android.volley.toolbox.ImageLoader.ImageListener;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


@ContentView(value = R.layout.activity_main)
public class MainActivity extends Activity {
@ViewInject(value = R.id.listView)
private ListView listview;
private MusicListResponse resp;
private RequestQueue queue;
private MusicAdapter adapter;
private BaseAdapter adapterq;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
x.view().inject(this);


// 发送http请求加载音乐列表数据
loadMusics();


}


@Event(value = R.id.listView, type = OnItemClickListener.class)
private void clickItem(AdapterView<?> arg0, View arg1, int position, long arg3) {
Toast.makeText(MainActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}


/**
* 加载所有音乐数据
*/
private void loadMusics() {
// 1 RequestQueue
queue = Volley.newRequestQueue(this);


// 2 StringRequest
String url = "http://tingapi.ting.baidu.com/v1/restserver/ting?from=qianqian&version=2.1.0&method=baidu.ting.billboard.billList&format=json&type=2&offset=0&size=50";
StringRequest req = new StringRequest(url, new Listener<String>() {


@Override
public void onResponse(String response) {
// 打印响应数据
// Log.i("info", response+"");
// 解析json字符串
Gson gson = new Gson();
resp = gson.fromJson(response, MusicListResponse.class);
// Log.i("inf", resp+"");
setlistvieHeader();
}
}, new ErrorListener() {


@Override
public void onErrorResponse(VolleyError error) {
Log.e("error", error.getMessage());


}
});
// 3 .add();
queue.add(req);
}


/**
* 给listView添加Header
*/
protected void setlistvieHeader() {
// 发送http请求 下载一张图片 显示在listView的headerView
// 1. RequestQueue
// 2. ImageRequest
String url = resp.getBillboard().getPic_s444();
ImageRequest req = new ImageRequest(url, new Listener<Bitmap>() {


@Override
public void onResponse(Bitmap bitmap) {
把bitmap设置到listView的headerView中
ImageView iv = new ImageView(MainActivity.this);
iv.setImageBitmap(bitmap);
iv.setScaleType(ScaleType.CENTER_CROP);
listview.addHeaderView(iv);
setAdapter();
}
}, 0, 0, Config.RGB_565, new ErrorListener() {


@Override
public void onErrorResponse(VolleyError error) {


}
});
// add (req);
queue.add(req);
}


/**
* 适配器
*/
protected void setAdapter() {


// adapter = new MusicAdapter();
adapterq = new XUtilsMusiAdapter();
listview.setAdapter(adapterq);


}


class XUtilsMusiAdapter extends BaseAdapter {
private ImageOptions options;


public XUtilsMusiAdapter() {
Animation anim = new ScaleAnimation(0, 1, 0, 1);
anim.setDuration(1000);
anim.setRepeatCount(Animation.INFINITE);


// Animation anim = new TranslateAnimation(-200, 0, 0, 0);
// anim.setDuration(200);
// anim.setRepeatCount(0);


options = new ImageOptions.Builder()
// .setFadeIn(true)
.setAnimation(anim).setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))// 图片大小
.setRadius(DensityUtil.dip2px(5))// ImageView圆角半径
.setLoadingDrawableId(R.drawable.ic_launcher)// 加载中默认显示图片
.setFailureDrawableId(R.drawable.ic_launcher)// 加载失败后默认显示图片
.build();


}


@Override
public int getCount() {
return resp.getSong_list().size();
}


@Override
public Music getItem(int position) {
return resp.getSong_list().get(position);
}


@Override
public long getItemId(int position) {
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.item_lv_music, null);
holder = new ViewHolder();
holder.ivPic = (ImageView) convertView.findViewById(R.id.ivPic);
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvSinger = (TextView) convertView.findViewById(R.id.tvSinger);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
// 给控件进行设置参数
Music m = getItem(position);
holder.tvName.setText(m.getTitle());
holder.tvSinger.setText(m.getAuthor());
// 批量下载图片
x.image().bind(holder.ivPic, m.getPic_small(), options);
return convertView;


}


class ViewHolder {
ImageView ivPic;
TextView tvName;
TextView tvSinger;
}


}


class MusicAdapter extends BaseAdapter {
private ImageLoader imageLoader;


public MusicAdapter() {
this.imageLoader = new ImageLoader(queue, new BitmapCache());
}


public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache;


public BitmapCache() {
int maxSize = 10 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
}


@Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
}


@Override
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}


}


@Override
public int getCount() {
return resp.getSong_list().size();
}


@Override
public Music getItem(int position) {
return resp.getSong_list().get(position);
}


@Override
public long getItemId(int position) {
return position;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(MainActivity.this, R.layout.item_lv_music, null);
holder = new ViewHolder();
holder.ivPic = (ImageView) convertView.findViewById(R.id.ivPic);
holder.tvName = (TextView) convertView.findViewById(R.id.tvName);
holder.tvSinger = (TextView) convertView.findViewById(R.id.tvSinger);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
// 给控件进行设置参数
Music m = getItem(position);
holder.tvName.setText(m.getTitle());
holder.tvSinger.setText(m.getAuthor());
// 批量下载图片
ImageListener listener = ImageLoader.getImageListener(holder.ivPic, R.drawable.ic_launcher,
R.drawable.ic_launcher);
imageLoader.get(m.getPic_small(), listener);
return convertView;


}


class ViewHolder {
ImageView ivPic;
TextView tvName;
TextView tvSinger;
}


}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值