/*
* Copyright (C) 2011 Cyril Mottier (http://www.cyrilmottier.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cyrilmottier.android.gdcatalog;
import greendroid.app.GDListActivity;
import greendroid.image.ImageProcessor;
import greendroid.widget.AsyncImageView;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class AsyncImageViewListActivity extends GDListActivity implements OnScrollListener {
private static final String BASE_URL_PREFIX = "http://www.cyrilmottier.com/files/greendroid/images/image";
private static final String BASE_URL_SUFFIX = ".png";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setListAdapter(new MyAdapter(this));
getListView().setOnScrollListener(this);
}
private static class MyAdapter extends BaseAdapter implements ImageProcessor {
private static final StringBuilder BUILDER = new StringBuilder();
private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
private final Rect mRectSrc = new Rect();
private final Rect mRectDest = new Rect();
private final String mImageForPosition;
static class ViewHolder {
public AsyncImageView imageView;
public TextView textView;
public StringBuilder textBuilder = new StringBuilder();
}
private Bitmap mMask;
private int mThumbnailSize;
private int mThumbnailRadius;
private LayoutInflater mInflater;
public MyAdapter(Context context) {
mInflater = LayoutInflater.from(context);
mImageForPosition = context.getString(R.string.image_for_position);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
mThumbnailSize = context.getResources().getDimensionPixelSize(R.dimen.thumbnail_size);
mThumbnailRadius = context.getResources().getDimensionPixelSize(R.dimen.thumbnail_radius);
prepareMask();
}
private void prepareMask() {
mMask = Bitmap.createBitmap(mThumbnailSize, mThumbnailSize, Bitmap.Config.ARGB_8888);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
Canvas c = new Canvas(mMask);
c.drawRoundRect(new RectF(0, 0, mThumbnailSize, mThumbnailSize), mThumbnailRadius, mThumbnailRadius, paint);
}
public int getCount() {
return 100;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.image_item_view, parent, false);
holder = new ViewHolder();
holder.imageView = (AsyncImageView) convertView.findViewById(R.id.async_image);
holder.imageView.setImageProcessor(this);
holder.textView = (TextView) convertView.findViewById(R.id.text);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
BUILDER.setLength(0);
BUILDER.append(BASE_URL_PREFIX);
BUILDER.append(position);
BUILDER.append(BASE_URL_SUFFIX);
holder.imageView.setUrl(BUILDER.toString());
final StringBuilder textBuilder = holder.textBuilder;
textBuilder.setLength(0);
textBuilder.append(mImageForPosition);
textBuilder.append(position);
holder.textView.setText(textBuilder);
return convertView;
}
public Bitmap processImage(Bitmap bitmap) {
Bitmap result = Bitmap.createBitmap(mThumbnailSize, mThumbnailSize, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(result);
mRectSrc.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
mRectDest.set(0, 0, mThumbnailSize, mThumbnailSize);
c.drawBitmap(bitmap, mRectSrc, mRectDest, null);
c.drawBitmap(mMask, 0, 0, mPaint);
return result;
}
}
public void onScroll(AbsListView arg0, int arg1, int arg2, int arg3) {
}
public void onScrollStateChanged(AbsListView listView, int scrollState) {
if (getListView() == listView) {
searchAsyncImageViews(listView, scrollState == OnScrollListener.SCROLL_STATE_FLING);
}
}
private void searchAsyncImageViews(ViewGroup viewGroup, boolean pause) {
final int childCount = viewGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
AsyncImageView image = (AsyncImageView) viewGroup.getChildAt(i).findViewById(R.id.async_image);
if (image != null) {
image.setPaused(pause);
}
}
}
}