ImageAdapter适配器:

001 package com.coverflow;
package com.coverflow;

002

003 import android.content.Context;

004 import android.graphics.Bitmap;

005 import android.graphics.BitmapFactory;

006 import android.graphics.Canvas;

007 import android.graphics.LinearGradient;

008 import android.graphics.Matrix;

009 import android.graphics.Paint;

010 import android.graphics.PorterDuffXfermode;

011 import android.graphics.Bitmap.Config;

012 import android.graphics.PorterDuff.Mode;

013 import android.graphics.Shader.TileMode;

014 import android.graphics.drawable.BitmapDrawable;

015 import android.view.View;

016 import android.view.ViewGroup;

017 import android.widget.BaseAdapter;

018 import android.widget.ImageView;

019

020 import com.gallery.R;

021

022 public class ImageAdapter extends BaseAdapter {

023 int mGalleryItemBackground;

024 private Context mContext;

025 private Integer[] mImageIds = {

026 R.drawable.a1,

027 R.drawable.a2,

028 R.drawable.a3,

029 R.drawable.a4,

030 R.drawable.a5 };

031

032 public ImageAdapter(Context c) {

033 mContext = c;

034 }

035

036 public int getCount() {

037 return mImageIds.length;

038 }

039

040 public Object getItem(int position) {

041 return position;

042 }

043

044 public long getItemId(int position) {

045 return position;

046 }

047

048 public View getView(int position, View convertView, ViewGroup parent) {

049

050 ImageView i = createReflectedImages(mContext,mImageIds[position]);

051

052 i.setLayoutParams(new CoverFlow.LayoutParams(120, 100));

053 i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

054

055 // 设置的抗锯齿

056 BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();

057 drawable.setAntiAlias(true);

058 return i;

059 }

060

061 public float getScale(boolean focused, int offset) {

062 return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));

063 }

064

065 public ImageView createReflectedImages(Context mContext,int imageId) {

066

067 Bitmap originalImage = BitmapFactory.decodeResource(mContext.getResources(), imageId);

068

069 final int reflectionGap = 4;

070

071 int width = originalImage.getWidth();

072 int height = originalImage.getHeight();

073

074 Matrix matrix = new Matrix();

075 matrix.preScale(1, -1);

076

077 Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,

078 height / 2, width, height / 2, matrix, false);

079

080 Bitmap bitmapWithReflection = Bitmap.createBitmap(width,

081 (height + height / 2), Config.ARGB_8888);

082

083 Canvas canvas = new Canvas(bitmapWithReflection);

084

085 canvas.drawBitmap(originalImage, 0, 0, null);

086

087 Paint deafaultPaint = new Paint();

088 canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);

089

090 canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

091

092 Paint paint = new Paint();

093 LinearGradient shader = new LinearGradient(0, originalImage

094 .getHeight(), 0, bitmapWithReflection.getHeight()

095 + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.MIRROR);

096

097 paint.setShader(shader);

098

099 paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

100

101 canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

102 + reflectionGap, paint);

103

104 ImageView imageView = new ImageView(mContext);

105 imageView.setImageBitmap(bitmapWithReflection);

106

107 return imageView;

108 }

109

110 }

002

003 import android.content.Context;

004 import android.graphics.Bitmap;

005 import android.graphics.BitmapFactory;

006 import android.graphics.Canvas;

007 import android.graphics.LinearGradient;

008 import android.graphics.Matrix;

009 import android.graphics.Paint;

010 import android.graphics.PorterDuffXfermode;

011 import android.graphics.Bitmap.Config;

012 import android.graphics.PorterDuff.Mode;

013 import android.graphics.Shader.TileMode;

014 import android.graphics.drawable.BitmapDrawable;

015 import android.view.View;

016 import android.view.ViewGroup;

017 import android.widget.BaseAdapter;

018 import android.widget.ImageView;

019

020 import com.gallery.R;

021

022 public class ImageAdapter extends BaseAdapter {

023 int mGalleryItemBackground;

024 private Context mContext;

025 private Integer[] mImageIds = {

026 R.drawable.a1,

027 R.drawable.a2,

028 R.drawable.a3,

029 R.drawable.a4,

030 R.drawable.a5 };

031

032 public ImageAdapter(Context c) {

033 mContext = c;

034 }

035

036 public int getCount() {

037 return mImageIds.length;

038 }

039

040 public Object getItem(int position) {

041 return position;

042 }

043

044 public long getItemId(int position) {

045 return position;

046 }

047

048 public View getView(int position, View convertView, ViewGroup parent) {

049

050 ImageView i = createReflectedImages(mContext,mImageIds[position]);

051

052 i.setLayoutParams(new CoverFlow.LayoutParams(120, 100));

053 i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

054

055 // 设置的抗锯齿

056 BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();

057 drawable.setAntiAlias(true);

058 return i;

059 }

060

061 public float getScale(boolean focused, int offset) {

062 return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));

063 }

064

065 public ImageView createReflectedImages(Context mContext,int imageId) {

066

067 Bitmap originalImage = BitmapFactory.decodeResource(mContext.getResources(), imageId);

068

069 final int reflectionGap = 4;

070

071 int width = originalImage.getWidth();

072 int height = originalImage.getHeight();

073

074 Matrix matrix = new Matrix();

075 matrix.preScale(1, -1);

076

077 Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,

078 height / 2, width, height / 2, matrix, false);

079

080 Bitmap bitmapWithReflection = Bitmap.createBitmap(width,

081 (height + height / 2), Config.ARGB_8888);

082

083 Canvas canvas = new Canvas(bitmapWithReflection);

084

085 canvas.drawBitmap(originalImage, 0, 0, null);

086

087 Paint deafaultPaint = new Paint();

088 canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);

089

090 canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

091

092 Paint paint = new Paint();

093 LinearGradient shader = new LinearGradient(0, originalImage

094 .getHeight(), 0, bitmapWithReflection.getHeight()

095 + reflectionGap, 0x70ffffff, 0x00ffffff, TileMode.MIRROR);

096

097 paint.setShader(shader);

098

099 paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

100

101 canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()

102 + reflectionGap, paint);

103

104 ImageView imageView = new ImageView(mContext);

105 imageView.setImageBitmap(bitmapWithReflection);

106

107 return imageView;

108 }

109

110 }

BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
drawable.setAntiAlias(true);
是保证图片绕Y旋转了以后不会出现锯齿.

下面是Activity:

01 package com.coverflow;
package com.coverflow;

02

03 import android.app.Activity;

04 import android.graphics.Color;

05 import android.os.Bundle;

06

07 import com.gallery.R;

08

09 public class HelloAndroid extends Activity {

10 /** Called when the activity is first created. */

11 @Override

12 public void onCreate(Bundle savedInstanceState) {

13 super.onCreate(savedInstanceState);

14

15 CoverFlow cf = new CoverFlow(this);

16 // cf.setBackgroundResource(R.drawable.shape);

17 cf.setBackgroundColor(Color.BLACK);

18 cf.setAdapter(new ImageAdapter(this));

19 ImageAdapter imageAdapter = new ImageAdapter(this);

20 cf.setAdapter(imageAdapter);

21 // cf.setAlphaMode(false);

22 // cf.setCircleMode(false);

23 cf.setSelection(2, true);

24 cf.setAnimationDuration(1000);

25 setContentView(cf);

26 }

27

28 }

02

03 import android.app.Activity;

04 import android.graphics.Color;

05 import android.os.Bundle;

06

07 import com.gallery.R;

08

09 public class HelloAndroid extends Activity {

10 /** Called when the activity is first created. */

11 @Override

12 public void onCreate(Bundle savedInstanceState) {

13 super.onCreate(savedInstanceState);

14

15 CoverFlow cf = new CoverFlow(this);

16 // cf.setBackgroundResource(R.drawable.shape);

17 cf.setBackgroundColor(Color.BLACK);

18 cf.setAdapter(new ImageAdapter(this));

19 ImageAdapter imageAdapter = new ImageAdapter(this);

20 cf.setAdapter(imageAdapter);

21 // cf.setAlphaMode(false);

22 // cf.setCircleMode(false);

23 cf.setSelection(2, true);

24 cf.setAnimationDuration(1000);

25 setContentView(cf);

26 }

27

28 }

参考自:
http://www.eoeandroid.com/thread-70209-1-1.html
http://www.apkbus.com/android-18441-1-1.html

更多相关文章

  1. 创建适配器时报:ERROR/AndroidRuntime(1703): Caused by: androi
  2. android中各种适配器之SimpleAdapter使用
  3. 可折叠的列表ExpandableListView及其适配器
  4. [置顶] Android中万能适配器
  5. android 抗锯齿效果
  6. Android中万能适配器
  7. Android适配器之------BaseAdapter(例子)
  8. Android之BaseAdapter适配器使用技巧
  9. 几种常用的适配器--Adapter

随机推荐

  1. Android硬编码——音频编码、视频编码及
  2. android中如何执行java命令
  3. 浅谈android的selector背景选择器
  4. android Intent机制详解
  5. Android节拍器
  6. Android中对Log日志文件的分析
  7. Android官方技术文档翻译——开发工具的
  8. Android事件分发机制完全解析,带你从源码
  9. Android(安卓)XML�O置屏幕方向(android:sc
  10. Android(安卓)Matrix详解