Mainactivity
package com.bwie.demo;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import com.bwie.demo.adapter.MyExpandAdapter;
import com.bwie.demo.bean.Reason;
import com.bwie.demo.utils.StreamTools;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private ViewPager vp;
private String[] urls = new String[] {
"http://tnfs.tngou.net/image/lore/150829/75ddc66c2c011fc5471bde4d218f12e5.jpg",
"http://tnfs.tngou.net/image/lore/150829/bfd758579579fee7cd0a3ba1231c1c2a.jpg",
"http://zxpic.gtimg.com/infonew/0/wechat_pics_-214521.jpg/168" };
private List<View> dotList;
private List<ImageView> imageList;
private ScheduledExecutorService sse;
private int currentPosition = 0;
// 圆点更换状态
private int oldPosition = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
getMenuData("秘制红烧肉");
}
private void initData() {
// 初始化圆点
dotList = new ArrayList<View>();
dotList.add(findViewById(R.id.dot1));
dotList.add(findViewById(R.id.dot2));
dotList.add(findViewById(R.id.dot3));
// 初始化Adapater所绑定的数据集合
imageList = new ArrayList<ImageView>();
for (int i = 0; i < urls.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.drawable.ic_launcher);
imageList.add(imageView);
}
}
public void getMenuData(String menu) {
try {
//异步
new AsyncTask<String, Void, String>() {
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result != null) {
Gson gson = new Gson();
Reason reason = gson.fromJson(result, Reason.class);
//设置二级列表的适配器
expadnLv.setAdapter(new MyExpandAdapter(MainActivity.this, reason));
}
}
@Override
protected String doInBackground(String... params) {
// 写网络耗时请求
try {
// 接收请求地址
String path = params[0];
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(path);
HttpResponse response = httpClient.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
if (code == HttpStatus.SC_OK) {
// 请求成功
InputStream is = response.getEntity().getContent();
String json = StreamTools.readFromNetWork(is);
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}.execute("http://apis.juhe.cn/cook/query?key=5de36998723a1ddf2fe292744b613b72&menu="
+ URLEncoder.encode(menu, "utf-8"));
} catch (Exception e) {
}
}
@SuppressWarnings("deprecation")
private void initView() {
etName = (EditText) findViewById(R.id.etName);
findViewById(R.id.btnSearch).setOnClickListener(this);
expadnLv = (ExpandableListView) findViewById(R.id.expandLv);
vp = (ViewPager) findViewById(R.id.vp);
vp.setAdapter(new MyPagerAdapter());
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
dotList.get(arg0 % imageList.size()).setBackgroundResource(
R.drawable.dot_focus);
dotList.get(oldPosition % imageList.size())
.setBackgroundResource(R.drawable.dot_normal);
// 更新圆点的位置
oldPosition = arg0;
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
protected void onResume() {
super.onResume();
sse = Executors.newSingleThreadScheduledExecutor();
sse.scheduleAtFixedRate(new PagerTask(), 2, 3, TimeUnit.SECONDS);
}
class MyPagerAdapter extends PagerAdapter {
private DisplayImageOptions options;
public MyPagerAdapter() {
options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true).build();
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageList.get(position % imageList.size()));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = imageList.get(position % imageList.size());
// 判断image是否有父类
if (imageView.getParent() != null) {
ViewPager parent = (ViewPager) imageView.getParent();
parent.removeView(imageView);
}
// 加载图片
ImageLoader.getInstance().displayImage(
urls[position % imageList.size()], imageView, options);
container.addView(imageView);
return imageView;
}
}
// 页面切换任务
class PagerTask implements Runnable {
@Override
public void run() {
// 当前切换的下个页面
currentPosition += 1;
// 子线程是不能更新UI
// 发送消息,通知主线程更新UI
handler.sendEmptyMessage(0);
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
// 页面切换
vp.setCurrentItem(currentPosition);
};
};
private ExpandableListView expadnLv;
private EditText etName;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSearch:
{
//搜索 请求网络
String content = etName.getText().toString().trim();
if(!TextUtils.isEmpty(content)){
getMenuData(content);
}else{
Toast.makeText(this, "输入的内容不能为空", Toast.LENGTH_LONG).show();
}
}
break;
default:
break;
}
}
}
Myapplaction 缓存图片
import java.io.File;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import android.app.Application;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化imageloader的动作
File cacheDir = StorageUtils.getCacheDirectory(this);
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480, 800)//内存中缓存多大的图片//*
.diskCacheExtraOptions(480, 800, null)//sdcard缓存多大的图片
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))//*
.memoryCacheSize(2*1024*1024)//内存缓存的最大值//*
.memoryCacheSizePercentage(13)//设置占用内存的百分比
.diskCache(new UnlimitedDiskCache(cacheDir))//设置自己的缓存目录
.diskCacheSize(50*1024*1024)//*
.build();
//初始化imageLoader
ImageLoader.getInstance().init(configuration);
}
}
MyExpandAdapter 二级列表适配器
import com.bwie.demo.R;
import com.bwie.demo.bean.Reason;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class MyExpandAdapter extends BaseExpandableListAdapter {
private Reason reason;
private Context context;
private DisplayImageOptions options;
public MyExpandAdapter(Context context, Reason reason) {
this.reason = reason;
this.context = context;
options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisk(true).build();
}
@Override
public int getGroupCount() {
// 拿到付条目的集合大小
return reason.getResult().getData().size();
}
@Override
public int getChildrenCount(int groupPosition) {
// 拿到一个子类的集合大小
return reason.getResult().getData().get(groupPosition).getSteps()
.size();
}
@Override
public Object getGroup(int groupPosition) {
return reason.getResult().getData().get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return reason.getResult().getData().get(groupPosition).getSteps()
.get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// 去填充父布局
if (convertView == null) {
convertView = View.inflate(context, R.layout.group_item, null);
}
ImageView groupIcon = (ImageView) convertView
.findViewById(R.id.groupIcon);
TextView groupTvTitle = (TextView) convertView
.findViewById(R.id.groupTvTitle);
// 设置文本
groupTvTitle.setText(reason.getResult().getData().get(groupPosition)
.getTitle());
// 加载图片
//设置父条目图片
ImageLoader.getInstance().displayImage(
reason.getResult().getData().get(groupPosition).getAlbums()
.get(0), groupIcon, options);
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
// 填充子布局
if (convertView == null) {
convertView = View.inflate(context, R.layout.child_item, null);
}
ImageView childIcon = (ImageView) convertView
.findViewById(R.id.childIcon);
TextView childTvTitle = (TextView) convertView
.findViewById(R.id.childTvTitle);
// 设置文本
childTvTitle.setText(reason.getResult().getData().get(groupPosition)
.getSteps().get(childPosition).getStep());
// 设置条目图片
ImageLoader.getInstance().displayImage(
reason.getResult().getData().get(groupPosition).getSteps()
.get(childPosition).getImg(), childIcon, options);
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}