- 浏览: 248541 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (237)
- Android 功能实现 (31)
- sql数据库的学习 (8)
- Android 美化界面 (2)
- Android 优化 (1)
- Ruby on Rails 方面 (45)
- git 方面的学习 (1)
- ruby 编程的琢磨 (13)
- linux下工具软件 (13)
- 操作系统的学习 (40)
- 非技术 (13)
- 网站开发 (18)
- js 学习笔记 (19)
- css学习 (5)
- 回顾总结 (2)
- Delphi 学习 (2)
- C 语言学习笔记 (1)
- 数据结构 (1)
- node js 学习 (6)
- 设计模式 (2)
- mongdb 学习笔记 (0)
- 软件服务 (3)
- osx系统 (4)
- 搜索引擎 (1)
- 测试工具 (1)
- Aliyun (1)
- 前端JS (1)
- python学习 (0)
- iOS系统 (1)
- 分布式锁 (1)
- 开发工具 (0)
- java代码 (2)
- java (1)
最新评论
-
jiguanghover:
写的不错,收藏一下
Ubuntu下RVM, Ruby, rails安装详细 和 卸载 -
maoghj:
回顾总结(二) -
yun2223:
对楼主表示感谢
Android控件开发之Gallery3D效果 -
zw_lovec:
说清楚点吧 亲 加点注释
out of memory -
lzyfn123:
http://www.iteye.com/images/smi ...
ruby-string 字符串的学习
Android控件开发之Gallery3D效果
- package xiaosi.GalleryFlow;
- import android.app.Activity;
- import android.os.Bundle;
- public class GalleryFlowActivity extends Activity {
- public void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- setContentView(R.layout.main);
- Integer[] images = { R.drawable.a, R.drawable.b,
- R.drawable.c, R.drawable.d, R.drawable.e,
- };
- ImageAdapter adapter = new ImageAdapter( this , images);
- adapter.createReflectedImages();
- GalleryFlow galleryFlow = (GalleryFlow) findViewById(R.id.Gallery01);
- galleryFlow.setAdapter(adapter);
- }
- }
ImageAdapter.java
- package xiaosi.GalleryFlow;
- import android.content.Context;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.Canvas;
- import android.graphics.LinearGradient;
- import android.graphics.Matrix;
- import android.graphics.Paint;
- import android.graphics.PorterDuffXfermode;
- import android.graphics.Bitmap.Config;
- import android.graphics.PorterDuff.Mode;
- import android.graphics.Shader.TileMode;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.ImageView;
- import android.widget.ImageView.ScaleType;
- public class ImageAdapter extends BaseAdapter
- {
- int mGalleryItemBackground;
- private Context mContext;
- private Integer[] mImageIds;
- private ImageView[] mImages;
- public ImageAdapter(Context c, Integer[] ImageIds)
- {
- mContext = c;
- mImageIds = ImageIds;
- mImages = new ImageView[mImageIds.length];
- }
- public boolean createReflectedImages()
- {
- final int reflectionGap = 4 ;
- int index = 0 ;
- for ( int imageId : mImageIds)
- {
- Bitmap originalImage = BitmapFactory.decodeResource(mContext.getResources(), imageId);
- int width = originalImage.getWidth();
- int height = originalImage.getHeight();
- Matrix matrix = new Matrix();
- matrix.preScale(1 , - 1 );
- Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0 , height / 2 , width, height / 2 , matrix, false );
- Bitmap bitmapWithReflection = Bitmap.createBitmap(width, (height + height / 2 ), Config.ARGB_8888);
- Canvas canvas = new Canvas(bitmapWithReflection);
- canvas.drawBitmap(originalImage, 0 , 0 , null );
- Paint deafaultPaint = new Paint();
- canvas.drawRect(0 , height, width, height + reflectionGap, deafaultPaint);
- canvas.drawBitmap(reflectionImage, 0 , height + reflectionGap, null );
- Paint paint = new Paint();
- LinearGradient shader = new LinearGradient( 0 , originalImage.getHeight(), 0 , bitmapWithReflection.getHeight()
- + reflectionGap, 0x70ffffff , 0x00ffffff , TileMode.CLAMP);
- paint.setShader(shader);
- paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
- canvas.drawRect(0 , height, width, bitmapWithReflection.getHeight() + reflectionGap, paint);
- ImageView imageView = new ImageView(mContext);
- imageView.setImageBitmap(bitmapWithReflection);
- imageView.setLayoutParams(new GalleryFlow.LayoutParams( 250 , 340 ));
- imageView.setScaleType(ScaleType.FIT_XY);
- mImages[index++] = imageView;
- }
- return true ;
- }
- private Resources getResources()
- {
- // TODO Auto-generated method stub
- return null ;
- }
- public int getCount()
- {
- return mImageIds.length;
- }
- public Object getItem( int position)
- {
- return position;
- }
- public long getItemId( int position)
- {
- return position;
- }
- public View getView( int position, View convertView, ViewGroup parent)
- {
- return mImages[position];
- }
- public float getScale( boolean focused, int offset)
- {
- return Math.max( 0 , 1 .0f / ( float ) Math.pow( 2 , Math.abs(offset)));
- }
- }
GalleryFlow.java
- package xiaosi.GalleryFlow;
- import android.content.Context;
- import android.graphics.Camera;
- import android.graphics.Matrix;
- import android.util.AttributeSet;
- import android.view.View;
- import android.view.animation.Transformation;
- import android.widget.Gallery;
- import android.widget.ImageView;
- public class GalleryFlow extends Gallery {
- private Camera mCamera = new Camera();
- private int mMaxRotationAngle = 60 ;
- private int mMaxZoom = - 120 ;
- private int mCoveflowCenter;
- public GalleryFlow(Context context) {
- super (context);
- this .setStaticTransformationsEnabled( true );
- }
- public GalleryFlow(Context context, AttributeSet attrs) {
- super (context, attrs);
- this .setStaticTransformationsEnabled( true );
- }
- public GalleryFlow(Context context, AttributeSet attrs, int defStyle) {
- super (context, attrs, defStyle);
- this .setStaticTransformationsEnabled( true );
- }
- public int getMaxRotationAngle() {
- return mMaxRotationAngle;
- }
- public void setMaxRotationAngle( int maxRotationAngle) {
- mMaxRotationAngle = maxRotationAngle;
- }
- public int getMaxZoom() {
- return mMaxZoom;
- }
- public void setMaxZoom( int maxZoom) {
- mMaxZoom = maxZoom;
- }
- private int getCenterOfCoverflow() {
- return (getWidth() - getPaddingLeft() - getPaddingRight()) / 2
- + getPaddingLeft();
- }
- private static int getCenterOfView(View view) {
- return view.getLeft() + view.getWidth() / 2 ;
- }
- protected boolean getChildStaticTransformation(View child, Transformation t) {
- final int childCenter = getCenterOfView(child);
- final int childWidth = child.getWidth();
- int rotationAngle = 0 ;
- t.clear();
- t.setTransformationType(Transformation.TYPE_MATRIX);
- if (childCenter == mCoveflowCenter) {
- transformImageBitmap((ImageView) child, t, 0 );
- } else {
- rotationAngle = (int ) ((( float ) (mCoveflowCenter - childCenter) / childWidth) * mMaxRotationAngle);
- if (Math.abs(rotationAngle) > mMaxRotationAngle) {
- rotationAngle = (rotationAngle < 0 ) ? -mMaxRotationAngle
- : mMaxRotationAngle;
- }
- transformImageBitmap((ImageView) child, t, rotationAngle);
- }
- return true ;
- }
- protected void onSizeChanged( int w, int h, int oldw, int oldh) {
- mCoveflowCenter = getCenterOfCoverflow();
- super .onSizeChanged(w, h, oldw, oldh);
- }
- private void transformImageBitmap(ImageView child, Transformation t,
- int rotationAngle) {
- mCamera.save();
- final Matrix imageMatrix = t.getMatrix();
- final int imageHeight = child.getLayoutParams().height;
- final int imageWidth = child.getLayoutParams().width;
- final int rotation = Math.abs(rotationAngle);
- // 在Z轴上正向移动camera的视角,实际效果为放大图片。
- // 如果在Y轴上移动,则图片上下移动;X轴上对应图片左右移动。
- mCamera.translate(0 .0f, 0 .0f, 100 .0f);
- // As the angle of the view gets less, zoom in
- if (rotation < mMaxRotationAngle) {
- float zoomAmount = ( float ) (mMaxZoom + (rotation * 1.5 ));
- mCamera.translate(0 .0f, 0 .0f, zoomAmount);
- }
- // 在Y轴上旋转,对应图片竖向向里翻转。
- // 如果在X轴上旋转,则对应图片横向向里翻转。
- mCamera.rotateY(rotationAngle);
- mCamera.getMatrix(imageMatrix);
- imageMatrix.preTranslate(-(imageWidth / 2 ), -(imageHeight / 2 ));
- imageMatrix.postTranslate((imageWidth / 2 ), (imageHeight / 2 ));
- mCamera.restore();
- }
- }
源代码:点击打开链接
原文链接:http://blog.csdn.net/sjf0115/article/details/7264552
发表评论
-
Android里的音量调节
2013-04-01 13:37 1356步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3522Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 721package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 903package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1128android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 958在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1640ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 1001Android 网络图片异步加载实例 ... -
解决java.lang.OutOfMemoryError
2012-03-19 15:53 1108解决java.lang.OutOfMemoryError ... -
android Text 删除线
2012-03-16 19:35 1190import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1541android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1465Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 845AsyncTask的使用 ... -
android GridView
2012-03-08 10:28 931主类 import android.app.Activi ... -
ListView异步加载图片是非常实用的方法
2012-03-08 10:09 980ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1248首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 620Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1446AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 1014main.xml <?xml ver ... -
AutoCompleteTextView
2012-03-02 16:17 1077public class CityAdapter<T& ...
相关推荐
Android控件开发之Gallery3D酷炫效果(带源码),功能简单,欢迎下载
《Android控件Gallery3D效果实现详解》 在Android应用开发中,为了提供更丰富的用户交互体验,常常会使用到一些特殊效果的控件。其中,Gallery3D效果就是一个非常吸引眼球的设计,它能实现类似3D翻转的图片浏览体验...
本文讲述了Android TV开发:实现3D仿Gallery效果的实例代码。分享给大家供大家参考,具体如下: 1.实现效果: 滚动翻页+ 页面点击+页码指示器+焦点控制 2.实现这个效果之前必须要了解 Android高级图片滚动控件实现3D...
在Android开发中,`Gallery`组件是一个非常有趣的控件,它可以用来展示一系列的图片或其它内容,用户可以左右滑动来浏览。本教程将详细讲解如何动态地向`Gallery`中添加图片,并实现倒影与3D翻转效果,使应用的用户...
在Android开发中,自定义控件是提升应用用户体验和视觉效果的重要手段。"android自定义3d画廊效果"是一个专为Android平台设计的特色功能,它通过实现3D视角的图片滚动效果,为用户提供了新颖且引人入胜的交互体验。...
这篇博客文章 "Android自定义控件(3D画廊)" 提供了一个实现这种效果的教程,下面将详细讲解相关知识点。 1. **自定义控件基础**:Android系统允许开发者创建自己的视图组件,通过继承现有的View或ViewGroup类,...
在Android平台上,`Gallery`组件是一个非常有趣且实用的控件,它允许用户在一个水平轴线上滑动浏览项目,常...如果你正在开发一个需要展示大量图片的应用,那么这样的3D`Gallery`效果无疑是一个值得尝试的特色功能。
总的来说,"Gallery 3D效果"涉及了位图操作、自定义视图、3D变换、动画以及可能的OpenGL ES使用,这些都是Android开发中高级和核心的技术点。通过实践和研究,开发者可以提升自己在这些领域的技能,从而构建出更具...
1. **自定义View**:Android系统默认的Gallery控件无法满足需求,因此需要创建一个自定义的View类,继承自Gallery,并覆盖其onDraw()方法,以便绘制3D效果。 2. **3D旋转**:利用Android的Canvas和Matrix类,可以...
在Android开发领域,3D效果的应用为用户界面带来了生动且吸引人的体验。"Android3D效果Gallery 可直接运行源码"项目就是这样一个实例,它展示了如何在Android应用中实现一个3D效果的图片画廊。这个项目允许开发者...
"安卓Gallery照片墙画廊图库相关-Android高级图片滚动控件3D版的图片轮播器Demo" 提供了一个独特的解决方案,通过3D效果来提升用户的视觉体验。这个Demo旨在展示如何实现一个高级的图片滚动控件,它可能是基于开源库...
综上所述,"android 3D画廊效果"项目是一个深度自定义的Android控件示例,它展示了如何通过创新和技巧来增强用户体验。通过研究和实践这个项目,开发者不仅可以掌握自定义控件和动画的实现,还能提高在Android平台上...
总结来说,"炫酷自定义控件3D绘制画廊效果"是一个利用3D图形技术和创新设计实现的Android控件,它可以提供一种独特且吸引人的图片浏览方式,是开发者提升应用体验和视觉效果的一个好选择。理解并掌握这种3D画廊的...
4.2.15 拖动效果(Gallery) 4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、...
"Gallery3D效果"是一个专为初学者设计的Android开发项目,主要展示了如何在应用程序中实现3D图像画廊的效果。这个项目包含了源码和相关的代码说明,方便开发者理解和学习。如果你是Android新手或者对3D图形展示感...
本资源包包含了一系列的Android控件示例源码,涵盖了多种类型的控件及其应用,有助于开发者深入理解Android UI设计和动画效果的实现。 1. 10.3 Image Switcher.rar `ImageSwitcher` 是一个用于展示图片切换效果的...
Android 4.0 Gallery3D源码分析 Gallery3D是Android系统中一个经典的3D图像浏览应用,尤其在Android 4.0(冰淇淋三明治)版本中,它提供了流畅且富有视觉冲击力的用户体验。这个源码是开发者深入理解Android 3D图像...
- **com.example.gallery3d.common**: 公共工具类和帮助器,如图片处理、动画效果等。 - **com.example.gallery3d.util**: 辅助工具类,包含线程管理、内存缓存等。 - **com.example.gallery3d.ui**: 用户界面...
在Android开发中,`Gallery`组件是一个非常有用的控件,它可以用来展示一系列的图片或其它内容,用户可以左右滑动来浏览。然而,原生的`Gallery`在Android API Level 16(Jelly Bean)之后已被废弃。尽管如此,...