- 浏览: 236437 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (236)
- 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 (0)
最新评论
-
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 1317步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3483Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 671package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 868package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1088android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 914在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1597ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 949Android 网络图片异步加载实例 ... -
解决java.lang.OutOfMemoryError
2012-03-19 15:53 1063解决java.lang.OutOfMemoryError ... -
android Text 删除线
2012-03-16 19:35 1144import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1499android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1434Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 785AsyncTask的使用 ... -
android GridView
2012-03-08 10:28 901主类 import android.app.Activi ... -
ListView异步加载图片是非常实用的方法
2012-03-08 10:09 923ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1203首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 588Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1411AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 977main.xml <?xml ver ... -
AutoCompleteTextView
2012-03-02 16:17 1042public class CityAdapter<T& ...
相关推荐
Android控件开发之Gallery3D酷炫效果(带源码),功能简单,欢迎下载
本文讲述了Android TV开发:实现3D仿Gallery效果的实例代码。分享给大家供大家参考,具体如下: 1.实现效果: 滚动翻页+ 页面点击+页码指示器+焦点控制 2.实现这个效果之前必须要了解 Android高级图片滚动控件实现3D...
今天主要是说说如何实现Gallery的3D显示切换,Demo的代码很多是基于网上一些现成效果,感谢这些分享成果的开发者
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、...
android控件的抖动效果 很漂亮的ListView android 图像处理滤镜 照亮边缘特效 无闪烁启动画面 Android实现《天女散花》效果--(带源码) 天天动听 半透明Menu效果 Android 小項目之---Iphone拖动图片特效 (附源码) ...
Android开发中有一个Gallery控件直接调用可以实现水平滑动效果,若需要实现垂直方向上或者比较3D效果的滑动则需要重写该类,而基于OpenGL同样可以实现该种效果,加上OpenGl控件上多了一个Z方向,更能实现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 状态栏提示...
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 状态栏提示...
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、...
Android 使用Gallery_tabhost实现标签效果图源码 Android 例子源码根据CPU使用时间计算程序电量使用 Android 医院介绍电子书籍源码 android 图片涂鸦 Android 基于局域网的P2P聊天系统 Android 天气预报 Android ...
第2章 控件开发实例集锦 44 实例023: 显示在文本框中输入的信息 44 实例024: 使用RadioGroup控件实现选 项选择功能 46 实例025: 使用CheckBox控件实现同意 条款效果 48 实例026: 使用Spinner控件实现选项选择 ...
46、Gallery3d效果 47、ListView 上拉加载更多效果 48、异步加载图片的二级缓存技术 49、QQ的好友列表展示效果 50、Fragment + ViewPager实现tab滑动切换 51、能够显示在桌面前面的的歌词效果 52、activity切换...
android-3d-carousel-view 数据控件有多种形式,最常用的一种是列表视图。 随着新兴的“手指友好”技术的出现,开发了各种控件以利用更轻松的数据浏览。 Android 本身支持 Gallery 视图,但这至少看起来有点“未...
4、ANDROID UI 控件 48 4.1、IMAGEBUTTON 48 4.1.1、图案填充问题 48 4.2、TEXTVIEW 49 4.2.1、动态滚动 49 4.3、EDITTEXT 49 4.3.1、光标选择 49 4.4、TITLEBAR 50 4.4.1、非全屏状态下不显示title标题栏 50 4.4.2...
4、ANDROID UI 控件 48 4.1、IMAGEBUTTON 48 4.1.1、图案填充问题 48 4.2、TEXTVIEW 49 4.2.1、动态滚动 49 4.3、EDITTEXT 49 4.3.1、光标选择 49 4.4、TITLEBAR 50 4.4.1、非全屏状态下不显示title标题栏 50 4.4.2...