package com.duguang.baseanimation.ui.imitate.waterfall;
import java.io.File;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.animation.AlphaAnimation;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import com.duguang.baseanimation.R;
import com.duguang.baseanimation.ui.base.BaseActivity;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
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.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
public class WaterfallMainActivity extends BaseActivity {
public static final String SERVER_IP = "http://10.198.229.62:8080/ImageServer";
private ImageLoader imageLoader;
private DisplayImageOptions options;
private ListView lv1;
private ListView lv2;
private ListView lv3;
private ImageView tempIv;
private PopupWindow pop;
private MyLinearLayout mll;
@Override
public void setView() {
setImageLoader();
setContentView(R.layout.activity_imitate_waterfall_main);
ConstantValue.SCREEN_WIDTH = getWindowManager().getDefaultDisplay()
.getWidth();
ConstantValue.SCREEN_HEIGHT = getWindowManager().getDefaultDisplay()
.getHeight();
lv1 = (ListView) findViewById(R.id.lv1);
lv2 = (ListView) findViewById(R.id.lv2);
lv3 = (ListView) findViewById(R.id.lv3);
mll = (MyLinearLayout) findViewById(R.id.mll);
imageLoader = ImageLoader.getInstance();
initOptions();
lv1.setAdapter(new MyAdapter1());
lv2.setAdapter(new MyAdapter2());
lv3.setAdapter(new MyAdapter3());
lv1.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
if (ConstantValue.CONTENTVIEW_TOP_MARGIN == 0) {
View contentView = getWindow().findViewById(
Window.ID_ANDROID_CONTENT);
ConstantValue.CONTENTVIEW_TOP_MARGIN = ConstantValue.SCREEN_HEIGHT
- contentView.getHeight();
}
ImageView tempIv = getTempIV();
String url = (String) parent.getItemAtPosition(position);
imageLoader.displayImage(url, tempIv);
showPop(tempIv);
return true;
}
});
lv2.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
if (ConstantValue.POPFLAG2 == true) {
ConstantValue.POPFLAG2 = false;
return true;
}
ImageView tempIv = getTempIV();
String url = (String) parent.getItemAtPosition(position);
imageLoader.displayImage(url, tempIv);
showPop(tempIv);
return true;
}
});
lv3.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
if (ConstantValue.POPFLAG3 == true) {
ConstantValue.POPFLAG3 = false;
return true;
}
ImageView tempIv = getTempIV();
String url = (String) parent.getItemAtPosition(position);
imageLoader.displayImage(url, tempIv);
showPop(tempIv);
return true;
}
});
}
@Override
public void initView() {
// TODO Auto-generated method stub
}
@Override
public void setListener() {
// TODO Auto-generated method stub
}
protected void showPop(ImageView tempIv) {
PopupWindow pop = getPopWindow();
pop.setContentView(tempIv);
pop.setBackgroundDrawable(new ColorDrawable());
pop.showAtLocation(getWindow().getDecorView(), Gravity.CENTER, 0,
ConstantValue.CONTENTVIEW_TOP_MARGIN / 2);
pop.setAnimationStyle(R.style.mypopwindow_anim_style);
pop.update();
AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.3f);
alpha.setDuration(400);
alpha.setFillAfter(true);
mll.startAnimation(alpha);
pop.setOnDismissListener(new OnDismissListener() {
public void onDismiss() {
mll.clearAnimation();
}
});
}
protected PopupWindow getPopWindow() {
if (pop == null) {
pop = new PopupWindow(tempIv, LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, true);
}
return pop;
}
protected ImageView getTempIV() {
tempIv = (ImageView) View.inflate(getApplicationContext(),
R.layout.activity_imitate_waterfall_listview_item, null);
return tempIv;
}
private void initOptions() {
options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.icon_imitate_waterfall_default1) // resource or drawable
.showImageForEmptyUri(R.drawable.icon_imitate_waterfall_default1) // resource or
// drawable
.showImageOnFail(R.drawable.icon_imitate_waterfall_default1) // resource or drawable
.resetViewBeforeLoading(false) // default
.delayBeforeLoading(0).cacheInMemory(true) // default
.cacheOnDisc(true) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
.bitmapConfig(Bitmap.Config.ARGB_8888) // default
.displayer(new SimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
}
class MyAdapter1 extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3000;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return SERVER_IP+"/" + position % 50
+ ".jpg";
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(getApplicationContext(),
R.layout.activity_imitate_waterfall_listview_item, null);
holder = new ViewHolder();
holder.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String imageUri = SERVER_IP+"/"
+ position % 50 + ".jpg";
imageLoader.displayImage(imageUri, holder.iv, options,
new ImageLoadingListener() {
// 监听中的几种方法不进行复写, 即可把相应图片进行自动填充;
public void onLoadingStarted(String imageUri, View view) {
}
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
}
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
}
public void onLoadingCancelled(String imageUri,
View view) {
}
});
return convertView;
}
}
class MyAdapter2 extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3000;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return SERVER_IP+"/a" + position % 20
+ ".jpg";
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(getApplicationContext(),
R.layout.activity_imitate_waterfall_listview_item, null);
holder = new ViewHolder();
holder.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String imageUri = SERVER_IP+"/a"
+ position % 20 + ".jpg";
imageLoader.displayImage(imageUri, holder.iv, options,
new ImageLoadingListener() {
public void onLoadingStarted(String imageUri, View view) {
}
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
}
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
}
public void onLoadingCancelled(String imageUri,
View view) {
}
});
return convertView;
}
}
class MyAdapter3 extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3000;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return SERVER_IP+"/b" + position % 20
+ ".jpg";
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(getApplicationContext(),
R.layout.activity_imitate_waterfall_listview_item, null);
holder = new ViewHolder();
holder.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String imageUri = SERVER_IP+"/b"
+ position % 20 + ".jpg";
imageLoader.displayImage(imageUri, holder.iv, options,
new ImageLoadingListener() {
public void onLoadingStarted(String imageUri, View view) {
}
public void onLoadingFailed(String imageUri, View view,
FailReason failReason) {
}
public void onLoadingComplete(String imageUri,
View view, Bitmap loadedImage) {
}
public void onLoadingCancelled(String imageUri,
View view) {
}
});
return convertView;
}
}
static class ViewHolder {
ImageView iv;
}
/**
* 配置ImageLoader框架
* 一般应用应该放在Application子类当中
*/
public void setImageLoader() {
File cacheDir = StorageUtils.getCacheDirectory(getApplicationContext());
// 可使用默认的配置, 如下:
// ImageLoaderConfiguration
// config=ImageLoaderConfiguration.createDefault(this);
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
this)
.memoryCacheExtraOptions(480, 800)
// default = device screen dimensions
.discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null)
.threadPoolSize(3)
// default
.threadPriority(Thread.NORM_PRIORITY - 1)
// default
.tasksProcessingOrder(QueueProcessingType.FIFO)
// default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))
.memoryCacheSize(2 * 1024 * 1024).memoryCacheSizePercentage(13)
// default
.discCache(new UnlimitedDiscCache(cacheDir))
// default
.discCacheSize(50 * 1024 * 1024).discCacheFileCount(100)
.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default
.imageDownloader(new BaseImageDownloader(this)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default
.writeDebugLogs().build();
ImageLoader.getInstance().init(config);
}
}