3DGallery

3d










工程源码:http://www.drovik.com/android/demo/3DGalleryDemo.rar


import android.app.Activity;


import android.content.Context;
003 import android.content.res.TypedArray;
004 import android.graphics.Bitmap;
005 import android.graphics.Bitmap.Config;
006 import android.graphics.BitmapFactory;
007 import android.graphics.Canvas;
008 import android.graphics.LinearGradient;
009 import android.graphics.Matrix;
010 import android.graphics.Paint;
011 import android.graphics.PorterDuff.Mode;
012 import android.graphics.PorterDuffXfermode;
013 import android.graphics.Shader.TileMode;
014 import android.graphics.drawable.BitmapDrawable;
015 import android.os.Bundle;
016 import android.view.Menu;
017 import android.view.View;
018 import android.view.ViewGroup;
019 import android.widget.AdapterView;
020 import android.widget.AdapterView.OnItemSelectedListener;
021 import android.widget.BaseAdapter;
022 import android.widget.ImageView;
023  
024 public class MainActivity extends Activity implementsOnItemSelectedListener{
025  
026     private CustomGallery gallery;
027     private ImageAdapter imageAdapter;
028  
029     private int[] resIds = new int[] { R.drawable.item1, R.drawable.item2,
030             R.drawable.item3, R.drawable.item4, R.drawable.item5,
031             R.drawable.item6, R.drawable.item7, R.drawable.item8,
032             R.drawable.item9, R.drawable.item10, R.drawable.item11,
033             R.drawable.item12, R.drawable.item13, R.drawable.item14,
034             R.drawable.item15 };
035  
036     @Override
037     public void onCreate(Bundle savedInstanceState) {
038         super.onCreate(savedInstanceState);
039         setContentView(R.layout.main);
040         gallery = (CustomGallery) findViewById(R.id.gallery);
041         gallery.setSelection(2, true);
042         gallery.setAnimationDuration(1000);
043         imageAdapter = new ImageAdapter(this);
044         gallery.setAdapter(imageAdapter);
045         gallery.setOnItemSelectedListener(this);
046     }
047  
048     @Override
049     public boolean onCreateOptionsMenu(Menu menu) {
050         getMenuInflater().inflate(R.menu.main, menu);
051         return true;
052     }
053  
054     @Override
055     public void onItemSelected(AdapterView<?> parent, View view, intposition,
056             long id) {
057         // 选中Gallery中某个图像时,在ImageSwitcher组件中放大显示该图像
058  
059     }
060  
061     @Override
062     public void onNothingSelected(AdapterView<?> parent) {
063     }
064      
065     public class ImageAdapter extends BaseAdapter {
066  
067         int mGalleryItemBackground;
068  
069         private Context mContext;
070  
071         public ImageAdapter(Context context) {
072             mContext = context;
073             TypedArray typedArray = obtainStyledAttributes(R.styleable.Gallery);
074             mGalleryItemBackground = typedArray.getResourceId(
075                     R.styleable.Gallery_android_galleryItemBackground,0);
076             typedArray.recycle();
077         }
078  
079         // 第1点改进,返回一个很大的值,例如,Integer.MAX_VALUE
080         public int getCount() {
081             return Integer.MAX_VALUE;
082         }
083  
084         public Object getItem(int position) {
085             return position;
086         }
087  
088         public long getItemId(int position) {
089             return position;
090         }
091  
092         public View getView(int position, View convertView, ViewGroup parent) {
093             ImageView i = createReflectedImages(mContext, resIds[position%resIds.length]);
094             i.setLayoutParams(new CustomGallery.LayoutParams(120,100));
095             i.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
096             // 设置的抗锯齿,防止图像在旋转的时候出现锯齿
097             BitmapDrawable drawable = (BitmapDrawable) i.getDrawable();
098             drawable.setAntiAlias(true);
099             return i;
100         }
101     }
102  
103     /**
104      * 为图片添加倒影
105      * @param mContext
106      * @param imageId
107      * @return
108      */
109     public ImageView createReflectedImages(Context mContext, intimageId) {
110         Bitmap originalImage = BitmapFactory.decodeResource(
111                 mContext.getResources(), imageId);
112         final int reflectionGap = 4;
113         int width = originalImage.getWidth();
114         int height = originalImage.getHeight();
115  
116         Matrix matrix = new Matrix();
117         matrix.preScale(1, -1);
118  

        Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
120                 height / 2, width, height / 2, matrix, false);
121  
122         Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
123                 (height + height / 2), Config.ARGB_8888);
124  
125         Canvas canvas = new Canvas(bitmapWithReflection);
126         canvas.drawBitmap(originalImage, 0, 0, null);
127  
128         Paint deafaultPaint = new Paint();
129         canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);
130         canvas.drawBitmap(reflectionImage, 0, height + reflectionGap,null);
131  
132         Paint paint = new Paint();
133         LinearGradient shader = new LinearGradient(0,
134                 originalImage.getHeight(), 0, bitmapWithReflection.getHeight()
135                         + reflectionGap, 0x70ffffff, 0x00ffffff,
136                 TileMode.MIRROR);
137  
138         paint.setShader(shader);
139         paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
140         canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
141                 + reflectionGap, paint);
142  
143         ImageView imageView = new ImageView(mContext);
144         imageView.setImageBitmap(bitmapWithReflection);
145  
146         return imageView;
147     }
148  
149 }

你可能感兴趣的:(android,3DGallery)