- 浏览: 273018 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
tonytony3:
THANK YOU
Android多级树形菜单的实现 -
haiyang08101:
deleteNumber = "421f481e-7 ...
java对xml文件做增删改查 -
求求你帮帮我:
怎么把我的空格也当成节点处理了?
java对xml文件做增删改查 -
求求你帮帮我:
deleteNumber = "421f481e-7 ...
java对xml文件做增删改查 -
lpj13579:
多谢分享,学习学习
高仿小米盒子UI效果实现
前面介绍了利用Android自带的控件,进行滑动翻页制作效果,现在我们通过代码实现一些滑动翻页的动画效果。
Animation实现动画有两个方式:帧动画(frame-by-frame animation)和补间动画(tweened animation)
本示例通过继承Animation自定义Rotate3D,实现3D翻页效果。效果图如下:
1、Rotate3D(Animation)
首先,自定义Animation的3D动画类Rotate3D
public class Rotate3D extends Animation { private float fromDegree; // 旋转起始角度 private float toDegree; // 旋转终止角度 private float mCenterX; // 旋转中心x private float mCenterY; // 旋转中心y private Camera mCamera; public Rotate3D(float fromDegree, float toDegree, float centerX, float centerY) { this.fromDegree = fromDegree; this.toDegree = toDegree; this.mCenterX = centerX; this.mCenterY = centerY; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float FromDegree = fromDegree; float degrees = FromDegree + (toDegree - fromDegree) * interpolatedTime; // 旋转角度(angle) final float centerX = mCenterX; final float centerY = mCenterY; final Matrix matrix = t.getMatrix(); if (degrees <= -76.0f) { degrees = -90.0f; mCamera.save(); mCamera.rotateY(degrees); // 旋转 mCamera.getMatrix(matrix); mCamera.restore(); } else if (degrees >= 76.0f) { degrees = 90.0f; mCamera.save(); mCamera.rotateY(degrees); mCamera.getMatrix(matrix); mCamera.restore(); } else { mCamera.save(); mCamera.translate(0, 0, centerX); // 位移x mCamera.rotateY(degrees); mCamera.translate(0, 0, -centerX); mCamera.getMatrix(matrix); mCamera.restore(); } matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }
然后,实例化Rotate3D的旋转方向
public void initAnimation() { // 获取旋转中心 DisplayMetrics dm = new DisplayMetrics(); dm = getResources().getDisplayMetrics(); mCenterX = dm.widthPixels / 2; mCenterY = dm.heightPixels / 2; // 定义旋转方向 int duration = 1000; lQuest1Animation = new Rotate3D(0, -90, mCenterX, mCenterY); // 下一页的【question1】旋转方向(从0度转到-90,参考系为水平方向为0度) lQuest1Animation.setFillAfter(true); lQuest1Animation.setDuration(duration); lQuest2Animation = new Rotate3D(90, 0, mCenterX, mCenterY); // 下一页的【question2】旋转方向(从90度转到0,参考系为水平方向为0度)(起始第一题) lQuest2Animation.setFillAfter(true); lQuest2Animation.setDuration(duration); rQuest1Animation = new Rotate3D(0, 90, mCenterX, mCenterY); // 上一页的【question1】旋转方向(从0度转到90,参考系为水平方向为0度) rQuest1Animation.setFillAfter(true); rQuest1Animation.setDuration(duration); rQuest2Animation = new Rotate3D(-90, 0, mCenterX, mCenterY); // 上一页的【question2】旋转方向(从-90度转到0,参考系为水平方向为0度) rQuest2Animation.setFillAfter(true); rQuest2Animation.setDuration(duration); }
2、Activity
首先,定义两个布局文件,用于旋转的画面切换
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_main" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> ... </LinearLayout>
next.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_next" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> ... </LinearLayout>
限于篇幅,完整布局文件请详见源码 ^_^
然后,初始化两个旋转的布局文件资源
private void initMain(){ setContentView(R.layout.main); layoutmain = (LinearLayout)findViewById(R.id.layout_main); btn_MainLast = (Button)findViewById(R.id.main_last); btn_MainNext = (Button)findViewById(R.id.main_next); btn_MainLast.setOnClickListener(listener); btn_MainNext.setOnClickListener(listener); } private void initNext(){ setContentView(R.layout.next); layoutnext = (LinearLayout)findViewById(R.id.layout_next); btn_NextLast = (Button)findViewById(R.id.next_last); btn_NextNext = (Button)findViewById(R.id.next_next); btn_NextLast.setOnClickListener(listener); btn_NextNext.setOnClickListener(listener); }
最后,设置布局文件中的按钮监听事件,响应3D旋转动画和方向
private View.OnClickListener listener = new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_last: // 上一页 layoutmain.startAnimation(lQuest1Animation); // 当前页向左旋转(0,-90) initNext(); layoutnext.startAnimation(lQuest2Animation); // 下一页向左旋转(90, 0) break; case R.id.main_next: // 下一页 layoutmain.startAnimation(rQuest1Animation); // 当前页向右旋转(0,90) initNext(); layoutnext.startAnimation(rQuest2Animation); // 下一页向右旋转(-90, 0) break; case R.id.next_last: layoutnext.startAnimation(lQuest1Animation); initMain(); layoutmain.startAnimation(lQuest2Animation); break; case R.id.next_next: layoutnext.startAnimation(rQuest1Animation); initMain(); layoutmain.startAnimation(rQuest2Animation); break; } } };
发表评论
-
Android 三大图片加载框架比较
2016-11-30 10:31 10901.哪三大图片加载框架? 1) Pi ... -
仿微信小视屏拍摄的进度条/自定义的progressBar的样式。
2016-08-20 00:25 1029今天有个需求,就是需要倒计时的进度条,样式参考微信小视屏拍摄 ... -
android 闹钟定时任务 AlarmManager
2016-06-02 13:41 1829直接上代码 package com.exampl ... -
android应用实现重启系统
2016-06-02 13:33 35271.在AndroidManifest.xml文件的manif ... -
android 每天定时提醒功能实现
2016-06-01 22:42 0android要实现定时的功 ... -
Java Calendar 类的时间操作
2016-06-01 21:02 670ava Calendar 类时间操作,这也许是创建日历和管理 ... -
android中fragment和activity之间相互通信
2014-11-13 16:25 1443在用到fragment的时候,老是会遇到一个问题,就是fra ... -
墨迹天气上下滑动viewpager
2014-11-04 17:15 764墨迹天气上下滑动viewpager -
Android杂谈--打开文件的Intent及使用
2014-10-25 13:03 648在写文件管理系统时会用到各种打开不同格式的文件的需求,由于A ... -
获取Android签名证书的sha1值
2014-08-23 23:14 666前言:今天开始研 ... -
java中Keytool的使用总结
2014-08-23 22:40 562J2SDK提供了keytool命令行工具,可以根据指定的参数 ... -
android获取versionName和versionCode
2014-07-08 18:02 739<TextView android:textSize= ... -
Android如何防止apk程序被反编译
2014-07-08 17:22 709作为Android应用开发者,不得不面对一个尴尬的局面,就是 ... -
在GridView中实现单选或多选功能
2014-06-26 13:08 846由于项目需要,要用到GridView实现多选功能,在网上搜 ... -
Android中Tween动画和Frame动画实例
2014-06-26 10:46 727Animation主要有两种动画模式:Tween动画和Fra ... -
android 禁用和开启四大组件的方法(setComponentEnabledSetting )
2014-06-19 15:26 0为什么要关闭组件? 在用到组件时,有时候我们可能暂时性的不使 ... -
android MD5校验码的生成与算法实现
2014-06-17 10:58 889在Java中,java.security.Mes ... -
android 自动检测版本升级
2014-06-15 14:10 387这里我用别的app代替了,简单省事,正常的话,你要对你的 ... -
layout左右平滑控制.
2014-04-30 09:41 617<?xml version="1.0&quo ... -
android让你的TabHost滑动起来
2014-04-22 22:13 821在Android应用中,一般TabActivity和若干个T ...
相关推荐
本文将深入探讨如何使用Animation动画实现Android的3D旋转滑动效果。 首先,Android中的动画主要分为两种类型:Property Animation(属性动画)和View Animation(视图动画)。在本案例中,我们将关注View ...
在Android中,我们可以使用`android.view.animation`包下的`RotateAnimation`类来创建2D旋转动画,但若要实现3D旋转,则需要利用到`android.graphics.Matrix`类和`Camera`类。 `Matrix`类是Android图形系统的基础,...
本文实例讲述了Android编程实现3D滑动旋转效果的方法。分享给大家供大家参考,具体如下: 这里我们通过代码实现一些滑动翻页的动画效果。 Animation实现动画有两个方式:帧动画(frame-by-frame animation)和补间...
这份"安卓Android源码——随手势进行3D旋转的源码.zip"提供了实现这一功能的示例代码,旨在帮助开发者理解和实践如何在Android应用中实现实时的手势驱动的3D旋转效果。 首先,让我们了解一下Android中的手势识别。...
总的来说,"安卓Android源码——圆形旋转菜单.zip"提供了一个关于Android自定义视图和动画实现的实例,对于学习Android开发,尤其是UI设计和动画效果的实现具有很高的参考价值。通过研究这个源码,开发者可以深入...
在Android中,可以利用`Animation`类或`ObjectAnimator`来实现动画效果。对于这个圆形旋转菜单,开发者可能使用了`RotateAnimation`,它允许菜单项围绕中心点旋转。同时,配合`onTouchEvent()`事件处理,当用户触摸...
在Android开发中,3D旋转效果控件是一种增强用户界面体验的重要技术,它能为应用程序带来生动、立体的视觉效果。3D旋转通常涉及到视图的转换和动画,通过使用Android提供的视图动画API或者属性动画API来实现。本文将...
在Android应用开发中,创建富有视觉吸引力的用户体验是至关重要的,而“android叠层3D旋转效果”就是一种能够提升用户界面(UI)体验的技术。本文将深入探讨如何在Android中实现这种效果,以及它是如何工作的。 ...
本篇文章主要探讨的是如何实现3D旋转这一特殊的自定义动画效果。3D旋转是Android动画库中的一种高级技巧,通过它可以创建出逼真的立体旋转效果,为用户带来更丰富的视觉体验。 在Android中,自定义动画主要包括两种...
本篇文章将深入探讨Android中的View 3D旋转,包括基本概念、实现方法、关键API以及实际应用示例。 一、3D旋转基础 在Android中,3D旋转是通过组合多个2D旋转来实现的,这些2D旋转可以在不同的轴上进行,例如X轴、Y...
在Android开发领域,进阶篇通常涵盖了一些更高级、更复杂的技术和实践,这些内容是开发者在掌握了基础知识后,为了提升应用性能、用户体验以及实现更丰富功能所必须掌握的。以下是一些可能在"android 实例代码(下)...
"Android菜单(3D旋转效果)"就是一个实例,展示了如何利用Android的动画框架实现动态、立体的菜单展示效果。在这个项目中,开发者通过编程实现了3D旋转,使用户在打开或关闭菜单时看到一个逼真的3D翻转动画。 首先...
本篇文章将深入探讨“Android自定义View的进阶”话题,结合提供的资源,我们将学习如何通过实践来提升自定义View的能力。 首先,自定义View的基本步骤包括创建一个新的View类,继承自Android内置的View或 ViewGroup...
综上所述,Android 3D旋转效果的实现涉及到多种技术和策略,从基本的`Animation`类到强大的Property Animation API,开发者可以根据项目需求选择合适的方法。`MyRorateViewTest`项目为学习和实践这一技术提供了很好...
3. **Animation和Animator**:Android的动画系统可以用来实现3D旋转效果。`ObjectAnimator`和`ValueAnimator`可以控制对象属性随时间变化,从而创建平滑的动画效果。`PropertyAnimator`接口则提供了对对象属性更精细...
此外,使用Android的Property Animation或者ObjectAnimator可以实现流畅的3D动画效果。 4. **SurfaceView和TextureView**:在Android中,SurfaceView和TextureView是用于显示视频的两种常见视图。SurfaceView适合于...
在Android开发中,360度3D旋转动画是一种常用且引人注目的视觉效果,可以为用户界面增添动态感和交互性。本教程将深入探讨如何实现这种效果,通过提供的"RotateDemo"代码示例,你可以直接运行并学习。 首先,让我们...
Android中的Matrix类提供了矩阵操作,可以进行平移、旋转和缩放等变换,是实现3D效果的关键。 2. **旋转动画**:要实现旋转木马的动态效果,需要使用Animation类或者ObjectAnimator来创建旋转动画。可以通过设置...
在Android开发中,3D旋转效果常常用于提升用户体验,特别是在展示产品或图像时,能带给用户更为生动真实的视觉感受。本教程将通过一个基于Android Studio的3D旋转展示产品的demo来详细讲解如何实现这一功能。 首先...
在本课程"3d旋转相册—css3高级进阶"中,我们将深入探讨如何利用CSS3的强大功能创建一个令人印象深刻的3D旋转相册。这个项目非常适合那些已经具备一定编程经验,特别是对HTML和CSS有基本理解的开发者。通过学习这个...