package com.image.coverflow;
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 mCoverflowCenter;
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;
}
@Override
protected boolean getChildStaticTransformation(View child, Transformation t) {
// TODO Auto-generated method stub
final int childCenter=getCenterOfView(child);
final int childWidth=child.getWidth();
int rotationAngle=0;
t.clear();
t.setTransformationType(Transformation.TYPE_MATRIX);
if(childCenter==mCoverflowCenter){
transformImageBitmap((ImageView)child,t,0);
}else{
rotationAngle=(int)(((float)(mCoverflowCenter-childCenter)/childWidth)*mMaxRotationAngle);
if(Math.abs(rotationAngle)>mMaxRotationAngle){
rotationAngle=(rotationAngle<0)?-mMaxRotationAngle:mMaxRotationAngle;
}
transformImageBitmap((ImageView)child, t, rotationAngle);
}
return true;
}
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);
mCamera.translate(0.0f, 0.0f, 100.0f);
if(rotation<mMaxRotationAngle){
float zoomAmount=(float)(mMaxZoom+(rotation*1.5));
mCamera.translate(0.0f, 0.0f, zoomAmount);
}
mCamera.rotateY(rotationAngle);
mCamera.getMatrix(imageMatrix);
imageMatrix.preTranslate(-(imageWidth/2), -(imageHeight/2));
imageMatrix.postTranslate((imageWidth/2), (imageHeight/2));
mCamera.restore();
}
protected void onSizeChanged(int w,int h,int oldw,int oldh) {
mCoverflowCenter=getCenterOfCoverflow();
super.onSizeChanged(w, h, oldw, oldh);
}
}
大富大贵7
- 粉丝: 393
- 资源: 8868
最新资源
- IP网络的仿真及实验.doc
- Metropolis-Hastings算法和吉布斯采样(Gibbs sampling)算法Python代码实现
- 高效排序算法:快速排序Java与Python实现详解
- 基于stm32风速风向测量仪V2.0
- 多边形框架物体检测27-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 国产文本编辑器:EverEdit用户手册 1.1.0
- 3.0(1).docx
- 多种土地使用类型图像分类数据集【已标注,约30,000张数据】
- 智慧校园数字孪生,三维可视化
- GigaDevice.GD32F4xx-DFP.2.1.0 器件安装包
- 基于 Spring Cloud 的一个分布式系统套件的整合 具备 JeeSite4 单机版的所有功能,统一身份认证,统一基础数据管理,弱化微服务开发难度
- opcclient源码OPC客户端 DA客户端源码(c#开发) C#开发,源码,可二次开发 本项目为VS2010开发,可转为VS其他版本的编辑器打开项目 已应用到多个行业的几百个应用现场,长时间运
- IMG_4525.jpg
- STM32F427+rtthread下的bootload 网口(webclient)+串口(ymodem)传输,代码无质量,谨慎使用
- FastAdmin后台框架开源且可以免费商用,一键生成CRUD, 一款基于ThinkPHP和Bootstrap的极速后台开发框架,基于Auth验证的权限管理系统,一键生成 CRUD,自动生成控制器等
- GD32F5XX系列的产品数据手册,学习手册,器件安装包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈