- 浏览: 109092 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
zhangchixtacbn:
能否发一份代码参考一下,谢谢。554242516@qq.com ...
DWZ整合struts2笔记 -
tuimaochang:
你好,这个有完整的源码吗?里面的对话框/图片资源用我自己的看不 ...
ActivityGroup + ViewPager 实现可滑动的底部Tab -
lintghi:
...
教你如何提高eclipse速度 -
119568242:
...
解决Bitmap读取频发OOM -
thunder_yan:
beat_it_ 写道能不能给份代码啊?上面不就是一个例子吗? ...
DWZ整合struts2笔记
MainActivity
package org.wp.activity; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.LinearGradient; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.PorterDuff.Mode; import android.graphics.PorterDuffXfermode; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.widget.ImageView; public class MainActivity extends Activity { private ViewGroup mContainer; private ImageView myFrontIv; private ImageView myBackIv; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mContainer = (ViewGroup) this.findViewById(R.id.mContainer); myFrontIv = (ImageView) this.findViewById(R.id.myFrontIv); myBackIv = (ImageView) this.findViewById(R.id.myBackIv); // 因为要旋转所以我们需要保存视图的缓存信息 mContainer.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE); myFrontIv.setImageBitmap(createReflectedImage(((BitmapDrawable) getResources() .getDrawable(R.drawable.picture1)).getBitmap())); myBackIv.setImageBitmap(createReflectedImage(((BitmapDrawable) getResources() .getDrawable(R.drawable.picture2)).getBitmap())); } public void showBack(View view) { applyRotation(1, 0, 90); } public void showFront(View view) { applyRotation(-1, 0, -90); } private void applyRotation(int position, float start, float end) { final float centerX = mContainer.getWidth() / 2.0f; final float centerY = mContainer.getHeight() / 2.0f; 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); } private final class DisplayNextView implements Animation.AnimationListener { private final int mPosition; private DisplayNextView(int position) { mPosition = position; } @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { mContainer.post(new SwapViews(mPosition)); } @Override public void onAnimationRepeat(Animation arg0) { } } private final class SwapViews implements Runnable { private final int mPosition; public SwapViews(int position) { mPosition = position; } @Override public void run() { final float centerX = mContainer.getWidth() / 2.0f; final float centerY = mContainer.getHeight() / 2.0f; Rotate3dAnimation rotation = null; if (mPosition > -1) { myFrontIv.setVisibility(View.GONE); myBackIv.setVisibility(View.VISIBLE); myBackIv.requestFocus(); rotation = new Rotate3dAnimation(-90, 0, centerX, centerY, 310.0f, false); } else { myFrontIv.setVisibility(View.VISIBLE); myBackIv.setVisibility(View.GONE); myFrontIv.requestFocus(); rotation = new Rotate3dAnimation(90, 0, centerX, centerY, 310.0f, false); } rotation.setDuration(500); rotation.setFillAfter(true); // 动画插入器 减速 rotation.setInterpolator(new DecelerateInterpolator()); mContainer.startAnimation(rotation); } } private Bitmap createReflectedImage(Bitmap originalBitmap) { final int reflectionGap = 4; int width = originalBitmap.getWidth(); int height = originalBitmap.getHeight(); Matrix matrix = new Matrix(); matrix.preScale(1, -1); Bitmap reflectionBitmap = Bitmap.createBitmap(originalBitmap, 0, height / 2, width, height / 2, matrix, false); Bitmap withReflectionBitmap = Bitmap.createBitmap(width, (height + height / 2 + reflectionGap), Config.ARGB_8888); Canvas canvas = new Canvas(withReflectionBitmap); canvas.drawBitmap(originalBitmap, 0, 0, null); Paint defaultPaint = new Paint(); canvas.drawRect(0, height, width, height + reflectionGap, defaultPaint); canvas.drawBitmap(reflectionBitmap, 0, height + reflectionGap, null); Paint paint = new Paint(); LinearGradient shader = new LinearGradient(0, originalBitmap.getHeight(), 0, withReflectionBitmap.getHeight(), 0x70ffffff, 0x00ffffff, TileMode.MIRROR); paint.setShader(shader); paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN)); canvas.drawRect(0, height, width, withReflectionBitmap.getHeight(), paint); return withReflectionBitmap; } }
Rotate3dAnimation
package org.wp.activity; import android.view.animation.Animation; import android.view.animation.Transformation; import android.graphics.Camera; import android.graphics.Matrix; public class Rotate3dAnimation extends Animation { /** 开始旋转的角度 **/ private final float mFromDegrees; /** 旋转结束的角度 **/ private final float mToDegrees; /** 图片中心X坐标 **/ private final float mCenterX; /** 图片中心Y坐标 **/ private final float mCenterY; /** Z轴上的距离 **/ 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(); } @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(); // x轴 正值向右 // y轴 正值向上 // z轴 正值缩小 if (mReverse) { // 由大变小 camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); } else { // 由小变大 camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime)); } // 围绕Y轴进行旋转 camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); // 旋转矩阵运算会以图像的原点为变换中心点,如果想要以图片中心点为旋转的中心点 // 就需要首先把整个View的中心移动到原点,矩阵运算完成后再把View移回原来的位置 matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mContainer"> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:onClick="showBack" android:id="@+id/myFrontIv" /> <ImageView android:layout_width="fill_parent" android:layout_height="fill_parent" android:onClick="showFront" android:visibility="gone" android:id="@+id/myBackIv" /> </LinearLayout> </LinearLayout>
发表评论
-
Android 实现圆形Panel ListView
2012-12-04 18:32 1239(效果如上图所示) 其实很简单: 比方说上面的容 ... -
Android WIFI热点工具
2012-10-28 02:09 3370Hello Thunder夜未眠, 午夜时分, 发布一个小工具 ... -
Android 2.3+ 使用StrictMode
2012-09-21 14:47 0ANR窗口产生的原因是多种多样的。程序的主线程因为IO读 ... -
内存泄露 on Android
2012-09-21 14:41 10481.资源对象没关闭造成的内存泄漏 描述: 资源性对象 ... -
Android 高效编程
2012-09-21 14:36 13081.使用本地方法 当 ... -
Android, BaseAdapter 处理大数据量时的优化
2012-09-21 14:23 7317Android优化 最常见的就是ListView, Galle ... -
SQLite优化方法
2012-09-21 13:50 34151.建表优化 SQLite的数据库本质文件读写操作,频 ... -
Android SQLite插入优化
2012-09-21 13:48 1265最初代码如下,直接执行sql语句,外加事务提升性能: ... -
解决Bitmap读取频发OOM
2012-08-25 09:48 1219/** * Bitmap 工具包 * @author ... -
ActivityGroup + ViewPager 实现可滑动的底部Tab
2012-07-01 17:28 6824首先看看布局文件 main.xml <?xml ... -
Android 使用des算法
2012-06-11 14:09 1852import java.security.Key; i ... -
Android 自定义Toast显示图片
2012-06-11 14:08 2923Toast用于向用户显示一些帮助/提示。下面展示了5种效 ... -
Android TabActivity中onKeyDown无效问题
2012-06-11 14:04 34881.当继承TabActivity时,同学们是不是onKeyDo ... -
Android程序安装和卸载
2012-06-11 14:01 998安装: String str = "/Can ... -
Android 完全退出
2012-06-11 14:00 2496//通过context获取系统服务,得到Activity ... -
Android:创建网格状的RadioGroup
2012-06-05 10:37 3386Android系统自带的Radio ... -
Android: NDK编程
2012-06-05 10:32 5692为何要用到NDK? 概括来说主要分为以下几种情况: ... -
android反编译和防止反编译的方法
2012-06-05 10:23 1485android基于java的,而ja ... -
android开发之MediaPlayer+Service MP3播放器
2012-06-02 14:57 3910import java.io.File; impo ... -
Android怎么让一个service开机自动启动
2012-06-02 14:58 1840今天我们主要来探讨android怎么让一个service开机自 ...
相关推荐
实现三维切换动画效果,通过滑动触发切换动画,基于Android平台实现
超炫的图片游览器,超炫的3D图片浏览可切换图片的效果! 触摸可拖拉效果!
android本身没有提供3d的图片翻转效果,为了实现3d的图片翻转,本示例通过使用camera类对图片从不同的角度的透视模拟了图片的3d翻转
用android相机类实现的图片的3D切换效果
4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) 4.2.22 对话框...
在Unity3D中模拟Android系统左右划屏切换页面的效果
Android3D游戏开发付费视频教程共享(更新第四集) 史上最全示例Android教学视频,非常值得观看 Android游戏开发系列源码+CHM+书籍截图+目录】 Android developer guide中文翻译文档 Android开发开发技巧之 EditText...
4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) 4.2.22 对话框...
像iphone相册那样的炫,立体,滑动切换图片。直接导入就可运行
4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) ...
----------------------------...• 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 (硬件加速可选) • SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...
4.2.16 切换图片(hmgeSwilcher) 4.2.17 网格视图(GridView) 4.2.18 卷轴视图(ScrollView) 4.2.19 进度条(ProgressBar) 4.2.20 拖动条(SeekBar) 4.2.21 状态栏提示(Notification、NotificationManager) ...
android图片浏览器,采用3D效果切换页面,需要在sd卡上创建welllmay\lanucher文件夹,在此文件夹中放置任意多个文件进去 执行程序就可以了
此Jquery插件实现了3D旋转图片立体展示幻灯片插件,功能非常酷。有兴趣的同学可以试着做一下。 包括了以下功能: 1、可支持鼠标滚轮控制图片360度旋转 2、鼠标支持左右方向控制按钮来控制图片旋转的方向 3、...
图像切换器(ImageSwitcher) 功能和用法 104 2.4.12 画廊视图(Gallery)的功能和 用法 107 2.5 对话框 110 2.5.1 使用AlertDialog创建简单 对话框 110 2.5.2 使用AlertDialog创建列表 对话框 ...
Android SDKv2.1.0是适用于Android系统移动设备的矢量地图开发包,也是v2.0.0的升级版本。 v2.1.0,功能介绍: 地图展示:包括2D图、卫星图、3D图地图展示。 地图操作:提供平移、缩放、双指手势操作、底图旋转等...
场景侦察Scene Recon 旨在引导用户在场景中拍摄一组合适的图片,以便可以重建该场景的 3D 模型。 原作者( )已经登录了他的发现。 要构建此 gradle 项目,请按照以下说明进行操作。 克隆这个存储库并切换到克隆的...
41、AIDL Service android中的跨进程调用 客户端,服务端见AidlService 42、BroadcastReceiver 接收广播消息 43、非UI线程中不能操作UI线程中的View测试 44、ImageSwitcher animation gesture实现可以滑动的跑马灯...