- 浏览: 249820 次
- 性别:
- 来自: 内蒙古
文章分类
- 全部博客 (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中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现,那么我们首先来分析一下Animation 和 Transformation。
Animation动画的主要接口,其中主要定义了动画的一些属性比如开始时间,持续时间,是否重复播放等等。而 Transformation中则包含一个矩阵和alpha值,矩阵是用来做平移,旋转和缩放动画的,而alpha值是用来做alpha动画的,要实现 3D旋转动画我们需要继承自Animation类来实现,我们需要重载getTransformation和applyTransformation,在 getTransformation中Animation会根据动画的属性来产生一系列的差值点,然后将这些差值点传给 applyTransformation,这个函数将根据这些点来生成不同的Transformation。下面是具体实现:
- public class Rotate3dAnimation extends Animation {
- //开始角度
- private final float mFromDegrees;
- //结束角度
- private final float mToDegrees;
- //中心点
- private final float mCenterX;
- private final float mCenterY;
- private final float mDepthZ;
- //是否需要扭曲
- private final boolean mReverse;
- //摄像头
- private Camera mCamera;
- public Rotate3dAnimation( float fromDegrees, float toDegrees,
- float centerX, float centerY, float depthZ, boolean reverse) {
- mFromDegrees = fromDegrees;
- mToDegrees = toDegrees;
- mCenterX = centerX;
- mCenterY = centerY;
- mDepthZ = depthZ;
- mReverse = reverse;
- }
- @Override
- public void initialize( int width, int height, int parentWidth, int parentHeight) {
- super .initialize(width, height, parentWidth, parentHeight);
- mCamera = new Camera();
- }
- //生成Transformation
- @Override
- protected void applyTransformation( float interpolatedTime, Transformation t) {
- final float fromDegrees = mFromDegrees;
- //生成中间角度
- float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime);
- final float centerX = mCenterX;
- final float centerY = mCenterY;
- final Camera camera = mCamera;
- final Matrix matrix = t.getMatrix();
- camera.save();
- if (mReverse) {
- camera.translate( 0 .0f, 0 .0f, mDepthZ * interpolatedTime);
- } else {
- camera.translate( 0 .0f, 0 .0f, mDepthZ * ( 1 .0f - interpolatedTime));
- }
- camera.rotateY(degrees);
- //取得变换后的矩阵
- camera.getMatrix(matrix);
- camera.restore();
- matrix.preTranslate(-centerX, -centerY);
- matrix.postTranslate(centerX, centerY);
- }
- }
其中包括了旋转的开始和结束角度,中心点、是否扭曲、和一个Camera,这里我们主要分析applyTransformation函 数,其中第一个参数就是通过getTransformation函数传递的差指点,然后我们根据这个差值通过线性差值算法计算出一个中间角度 degrees,Camera类是用来实现绕Y轴旋转后透视投影的,因此我们首先通过t.getMatrix()取得当前的矩阵,然后通过 camera.translate来对矩阵进行平移变换操作,camera.rotateY进行旋转。这样我们就可以很轻松的实现3D旋转效果了,该例子 的原意是通过一个列表来供用户选择要实现翻转的图像,所以我们分析至少需要定义两个控件:ListView和ImageView(要翻转的图像),主界面 的xml布局定义如下所示。
- < FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
- android:id = "@+id/container"
- android:layout_width = "match_parent"
- android:layout_height = "match_parent" >
- < ListView
- android:id = "@android:id/list"
- android:persistentDrawingCache = "animation|scrolling"
- android:layout_width = "match_parent"
- android:layout_height = "match_parent"
- android:layoutAnimation = "@anim/layout_bottom_to_top_slide" />
- < ImageView
- android:id = "@+id/picture"
- android:scaleType = "fitCenter"
- android:layout_width = "match_parent"
- android:layout_height = "match_parent"
- android:visibility = "gone" />
- </ FrameLayout >
然后准备好需要的资源,在onCreate函数中准备好ListView和ImageView,因为要旋转所以我们需要保存视图的缓存 信息,通过setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);可以设 置该功能,当我们选择列表中的图像资源后在onItemClick中将选择的资源Id对应的图像设置到ImageView中,然后通过 applyRotation来启动一个动画,前面有了Rotate3dAnimation的实现,我们要完成3D翻转动画就很简单,直接构建一个 Rotate3dAnimation对象,设置其属性(包括动画监听),这里将动画的监听设置为DisplayNextView,可以用来显示下一个视 图,在其中的动画结束监听(onAnimationEnd)中,通过一个县城SwapViews来交换两个画面,交换过程则是设置ImageView和 ListView的显示相关属性,并构建一个Rotate3dAnimation对象,对另一个界面进行旋转即可,然后启动动画,整个转换过程实际上就是 将第一个界面从0度转好90度,然后就爱你过第二个界面从90度转到0度,这样就形成了一个翻转动画,完整代码如下,我们也加入了一些必要的注解,大家也 可以参考APIDemo中的Transition3d例子。
- public class Transition3d extends Activity implements
- AdapterView.OnItemClickListener, View.OnClickListener {
- //照片列表
- private ListView mPhotosList;
- private ViewGroup mContainer;
- private ImageView mImageView;
- // 照片的名字,用于显示在list中
- private static final String[] PHOTOS_NAMES = new String[] {
- "Lyon" ,
- "Livermore" ,
- "Tahoe Pier" ,
- "Lake Tahoe" ,
- "Grand Canyon" ,
- "Bodie"
- };
- // 资源id
- private static final int [] PHOTOS_RESOURCES = new int [] {
- R.drawable.photo1,
- R.drawable.photo2,
- R.drawable.photo3,
- R.drawable.photo4,
- R.drawable.photo5,
- R.drawable.photo6
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super .onCreate(savedInstanceState);
- setContentView(R.layout.animations_main_screen);
- mPhotosList = (ListView) findViewById(android.R.id.list);
- mImageView = (ImageView) findViewById(R.id.picture);
- mContainer = (ViewGroup) findViewById(R.id.container);
- // 准备ListView
- final ArrayAdapter adapter = new ArrayAdapter( this ,
- android.R.layout.simple_list_item_1, PHOTOS_NAMES);
- mPhotosList.setAdapter(adapter);
- mPhotosList.setOnItemClickListener( this );
- // 准备ImageView
- mImageView.setClickable( true );
- mImageView.setFocusable( true );
- mImageView.setOnClickListener( this );
- //设置需要保存缓存
- mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
- }
- /**
- * Setup a new 3D rotation on the container view.
- *
- * @param position the item that was clicked to show a picture, or -1 to show the list
- * @param start the start angle at which the rotation must begin
- * @param end the end angle of the rotation
- */
- private void applyRotation( int position, float start, float end) {
- // 计算中心点
- final float centerX = mContainer.getWidth() / 2 .0f;
- final float centerY = mContainer.getHeight() / 2 .0f;
- // Create a new 3D rotation with the supplied parameter
- // The animation listener is used to trigger the next animation
- final Rotate3dAnimation rotation =
- new Rotate3dAnimation(start, end, centerX, centerY, 310 .0f, true );
- rotation.setDuration( 500 );
- rotation.setFillAfter( true );
- rotation.setInterpolator( new AccelerateInterpolator());
- //设置监听
- rotation.setAnimationListener( new DisplayNextView(position));
- mContainer.startAnimation(rotation);
- }
- public void onItemClick(AdapterView parent, View v, int position, long id) {
- // 设置ImageView
- mImageView.setImageResource(PHOTOS_RESOURCES[position]);
- applyRotation(position, 0 , 90 );
- }
- //点击图像时,返回listview
- public void onClick(View v) {
- applyRotation(- 1 , 180 , 90 );
- }
- /**
- * This class listens for the end of the first half of the animation.
- * It then posts a new action that effectively swaps the views when the container
- * is rotated 90 degrees and thus invisible.
- */
- private final class DisplayNextView implements Animation.AnimationListener {
- private final int mPosition;
- private DisplayNextView( int position) {
- mPosition = position;
- }
- public void onAnimationStart(Animation animation) {
- }
- //动画结束
- public void onAnimationEnd(Animation animation) {
- mContainer.post( new SwapViews(mPosition));
- }
- public void onAnimationRepeat(Animation animation) {
- }
- }
- /**
- * This class is responsible for swapping the views and start the second
- * half of the animation.
- */
- private final class SwapViews implements Runnable {
- private final int mPosition;
- public SwapViews( int position) {
- mPosition = position;
- }
- public void run() {
- final float centerX = mContainer.getWidth() / 2 .0f;
- final float centerY = mContainer.getHeight() / 2 .0f;
- Rotate3dAnimation rotation;
- if (mPosition > - 1 ) {
- //显示ImageView
- mPhotosList.setVisibility(View.GONE);
- mImageView.setVisibility(View.VISIBLE);
- mImageView.requestFocus();
- rotation = new Rotate3dAnimation( 90 , 180 , centerX, centerY, 310 .0f, false );
- } else {
- //返回listview
- mImageView.setVisibility(View.GONE);
- mPhotosList.setVisibility(View.VISIBLE);
- mPhotosList.requestFocus();
- rotation = new Rotate3dAnimation( 90 , 0 , centerX, centerY, 310 .0f, false );
- }
- rotation.setDuration( 500 );
- rotation.setFillAfter( true );
- rotation.setInterpolator( new DecelerateInterpolator());
- //开始动画
- mContainer.startAnimation(rotation);
- }
- }
- }
发表评论
-
Android里的音量调节
2013-04-01 13:37 1362步骤1:或许系统音量 ... -
Android Camera 方法分析
2012-03-29 10:52 3525Android Camera源码分析 android通 ... -
MyCameraActivity
2012-03-29 10:10 724package cn.fn; import android. ... -
MyCameraActivity
2012-04-01 13:27 904package cn.fn; import android. ... -
android AutoCompleteTextView+ SQLite
2012-03-21 13:33 1133android AutoCompleteTextView+ S ... -
android 异步回调加载网络图片
2012-03-20 11:50 960在做应用的时候很多时候都会去从网络加载图片,而且还要做各种各样 ... -
ProgressBar+AsyncTask 实现界面数据异步加载
2012-03-20 10:09 1643ProgressBar+AsyncTask 实现界面数据异步 ... -
Android 网络图片异步加载实例
2012-03-20 10:04 1003Android 网络图片异步加载实例 ... -
解决java.lang.OutOfMemoryError
2012-03-19 15:53 1112解决java.lang.OutOfMemoryError ... -
android Text 删除线
2012-03-16 19:35 1195import android.app.Activit ... -
android Gallery 详解
2012-03-14 14:17 1543android Gallery 正文 ... -
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask,Task,AsynTask等
2012-03-14 11:43 1467Android的线程使用来更新UI----Thread、Han ... -
AsyncTask的使用
2012-03-14 10:59 847AsyncTask的使用 ... -
Android控件开发之Gallery3D效果
2012-03-13 14:38 2950Android控件开发之Gal ... -
android GridView
2012-03-08 10:28 932主类 import android.app.Activi ... -
ListView异步加载图片是非常实用的方法
2012-03-08 10:09 983ListView异步加载图片是非常实用的方法,凡是是要通过网络 ... -
复制assets下的数据库到SD卡
2012-03-07 10:56 1251首先使用sqliteadDev(一个windows下图形化sq ... -
Android异步加载图像小结
2012-03-06 16:46 623Android异步加载图像小结 (1)由于an ... -
AutoCompleteTextView
2012-03-05 14:53 1450AutoCompleteTextView ... -
android 动态加载List
2012-03-05 11:11 1015main.xml <?xml ver ...
相关推荐
例如,我们可以使用`transform: rotateY(180deg)`来让元素绕Y轴翻转180度,从而达到翻面的效果。 JavaScript部分,我们可以设置一个定时器,每隔一定时间(如1秒)检查一次剩余时间,并更新界面。以下是一个简单的...
这段CSS代码中,`.roll`类是当鼠标悬停时添加的,`rotateY(180deg)`使得元素绕Y轴翻转180度,产生翻滚效果。`transition`属性定义了这个变换过程应该持续多久(0.5s)以及使用何种缓动函数(ease)来平滑地执行动画...
/* 使图片绕Y轴翻转180度 */ } ``` 3. **JavaScript(JS)**:JavaScript是实现动态交互的关键,它允许根据用户的操作或时间间隔动态地改变HTML和CSS。在这个例子中,JavaScript可能会用来添加或移除上述CSS类(如...
当鼠标悬停在元素上时,元素会沿着特定轴线进行旋转,这里提到的是沿着Y轴旋转,也就是垂直于屏幕的轴线,使得用户有一种图片翻转的感觉,增加了交互性和视觉吸引力。 要创建这样的3D旋转效果,我们需要了解以下几...
它们分别控制View的整体旋转、沿X轴的旋转和沿Y轴的旋转。这些方法都会影响到View的Matrix,Matrix是Android图形系统中用于进行几何变换的关键对象。 `setRotation()`方法会使View围绕其中心点进行旋转,参数为旋转...
当鼠标悬停在卡片上时,此属性将使卡片绕Y轴翻转180度,从而达到翻转效果。同时,我们还需要通过CSS3的伪类选择器`:hover`来控制鼠标悬停时的样式变化。 重叠效果则可以通过设置卡片的相对位置实现。我们可以通过...
2. **Y轴翻转**:绕Y轴的翻转会影响图像的上下位置。同样,180度旋转会使图像上下颠倒。在处理时,我们需要更新图像的坐标映射,使其在Y轴上的位置反转。 3. **Z轴翻转**:Z轴翻转涉及的是深度感知,通常与透视有关...
// 参数1表示沿Y轴翻转 // 上下翻转 // cv::flip(image, image, 0); // 参数1表示沿X轴翻转 // 保存翻转后的图像 cv::imwrite("output.jpg", image); ``` 总的来说,“图片翻转”是图像处理中的基础操作,无论是...
通过改变矩阵的`m00`、`m11`和`m22`元素,可以实现绕X轴或Y轴的翻转。同时,需要考虑从哪个方向翻转,以及是否需要配合透视效果。 5. 目标Activity的动画:如果希望目标Activity也有类似效果,可以创建另一个自定义...
在进行翻转动画时,我们会对一个视图应用一个180度的绕Y轴旋转,从而模拟翻转效果。 接下来,我们来看看如何使用Swift语言实现这个动画效果。以下是一个简单的示例: ```swift import UIKit class ViewController...
为了实现翻转效果,我们通常会先让视图绕Y轴旋转180度,然后恢复原状,从而给人一种翻转的感觉。代码示例如下: ```swift let flipTransform = CGAffineTransform(rotationAngle: .pi) view.transform = ...
例如,如果要让一个图片元素`<img id="flipImage" src="image.jpg">`沿着Y轴翻转,可以这样写: ```css #flipImage { transform: rotateY(180deg); } ``` 这个描述中提到的“附件中CSS属性”可能包含了一个示例...
- `-1`:表示同时沿两个轴翻转,即图像绕着图像中心翻转180度。 2. **翻转操作** `flip`函数的工作原理是通过交换图像对应像素的位置来实现翻转效果。例如,对于水平翻转,它会将原图像的左边缘像素与右边缘对应...
同样,`rotateY(90deg)`会沿着Y轴翻转。通过组合这些旋转,我们可以模拟骰子的任意翻转动画。 为了使翻转动画平滑,我们可以使用CSS的`transition`属性。指定`transition: transform 0.5s;`将使得变换过程在0.5秒内...
这个模式参数用于指定图片的处理方式,如直接绘制(0)、绕Y轴镜像翻转(0x2000)或绕X轴镜像翻转(0x4000)。函数通过设置Graphics对象的剪切区域来实现翻转效果,逐行或逐列地绘制图片。 在MIDP1.0中,由于不支持...
- `transform: rotateY(180deg)`:这是实现水平翻转的关键,它通过绕Y轴旋转180度,使得元素看起来像是翻转了过来。 - `transform-origin`:这个属性可以设置变换的原点,决定元素从哪个位置开始翻转。 4. **...
例如,`rotateX(180deg)`会使元素绕X轴翻转180度,呈现出正面翻转到背面的效果。 2. **过渡效果**:为了使翻转过程平滑自然,我们需要使用`transition`属性来定义翻转动画的时长和速度曲线。例如,`transition: ...
- `scale`属性:设置元素的缩放比例,可以分别设置X和Y轴的缩放值。 - `pivotPoint`属性:与`origin`类似,定义缩放的中心点。 3. **动画(Animation)** - `Transition`和`State`:用于创建平滑的动画过渡,可以...
为了实现翻转效果,使用`transform`属性中的`rotateY`或者`rotateX`函数,这允许我们绕着Y轴或X轴旋转元素。例如,可以设置`.page`类在不同时间点的`rotateY`值,当它们在时间线上顺序被激活时,就会产生色子翻转的...
`:这三个函数分别用于绕X轴、Y轴和Z轴进行旋转。通过调整角度值,可以控制方块翻转的方向和程度。 3. `perspective: value;`:此属性定义了观察者与3D元素之间的距离,影响元素的透视效果,使3D变换看起来更加真实...