- 浏览: 252398 次
- 性别:
- 来自: 太原
最新评论
-
kinglo:
请问生成的文件怎么看?
Android 全局异常处理 -
yong7356:
学习一下。。。。。
Android Ant -
bzlring:
很好
Android 全局异常处理 -
M985300651:
難得一見的好教學
Android 自定义滚动视图 -
i5suoi:
thank you very much
Android 全局异常处理
MainActivity
package org.wp.activity; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.ViewConfiguration; import android.widget.FrameLayout; import android.widget.ImageView; public class MainActivity extends Activity { /** 图片资源ID **/ private Integer[] mImageIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5, R.drawable.image6 }; private static final int LEFT = 0x10; private static final int RIGHT = 0x11; /** FreamLayout **/ private FrameLayout mContainer; /** 第一个ImageView **/ private ImageView myIv1; /** 第二个ImageView **/ private ImageView myIv2; /** 底部圆圈 **/ private PageControlView pageControlView = null; /** 抖动动画 **/ private Animation shake; /** 手势识别对象GestureDetector **/ private GestureDetector gestureDetector = null; /** Handler对象 **/ public Handler iHandler; /** 标识是否动画正在执行 **/ private boolean flag = false; /** 定时开始时间 **/ private long start; /** 当前时间 **/ private long end; /** 显示图片的数量 **/ private final int childCount = 6; /** 当前屏幕索引 **/ private int currentScreenIndex = 0; /** ImageView先后顺序 **/ private int currentIndex = 0; private final int iv1Index = 1; private final int iv2Index = 2; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); addBtnEvent(); addMessageHandler(); } private void addBtnEvent() { // 抖动动画 shake = AnimationUtils.loadAnimation(this, R.anim.shake); // 手势识别 gestureDetector = new GestureDetector(new FlingGestureDetector()); mContainer = (FrameLayout) this.findViewById(R.id.mContainer); mContainer.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // 如果没有动画正在执行 if (!flag) { // 当前时间记录为开始时间 start = System.currentTimeMillis(); // 判断用户手势 gestureDetector.onTouchEvent(arg1); } return false; } }); myIv1 = (ImageView) this.findViewById(R.id.myIv1); myIv2 = (ImageView) this.findViewById(R.id.myIv2); // 初始化显示图片 myIv2.setImageResource(mImageIds[0]); // 初始化当前图片所以为0 currentScreenIndex = 0; // 当前先后索引为iv2Index currentIndex = iv2Index; pageControlView = (PageControlView) this.findViewById(R.id.myPageControlView); /** 设置圆圈的数量 **/ pageControlView.setCount(childCount); /** 初始化圆圈 **/ pageControlView.generatePageControl(0); // 启动监听线程 new OnFlingListener().start(); } private void addMessageHandler() { iHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case LEFT: scrollToScreen(currentScreenIndex - 1, 90.0f); break; case RIGHT: scrollToScreen(currentScreenIndex + 1, -90.0f); break; } } }; } /** 手势识别 **/ private class FlingGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { // 判断是否达到最小轻松速度,取绝对值的 if (Math.abs(velocityX) > ViewConfiguration.get(MainActivity.this) .getScaledMinimumFlingVelocity()) { if (velocityX > 0 && currentScreenIndex > 0) { // 上一张图片 scrollToScreen(currentScreenIndex - 1, 90.0f); } else if (velocityX < 0 && currentScreenIndex < childCount - 1) { // 下一张图片 scrollToScreen(currentScreenIndex + 1, -90.0f); } else { // 如果没有,抖动 mContainer.startAnimation(shake); } } return false; } } /** 切换到指定屏 **/ public void scrollToScreen(int whichScreen, float degrees) { // 更新当前屏幕索引 currentScreenIndex = whichScreen; // 重绘底部圆圈 pageControlView.callback(currentScreenIndex); if (currentIndex == iv1Index) { // 如果myIv1在前 currentIndex = iv2Index; // 设置myIv2图片资源 myIv2.setImageResource(mImageIds[whichScreen]); // 旋转myIv1 applyRotation(myIv1, 0, degrees); // 旋转myIv2 applyRotation(myIv2, -degrees, 0); } else if (currentIndex == iv2Index) { // 如果myIv2在前 currentIndex = iv1Index; // 设置myIv1图片资源 myIv1.setImageResource(mImageIds[whichScreen]); // 旋转myIv2 applyRotation(myIv2, 0, degrees); // 旋转myIv1 applyRotation(myIv1, -degrees, 0); } } /** 实现旋转 **/ private void applyRotation(ImageView iv, 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); rotation.setDuration(500); rotation.setFillAfter(true); // 监听第二个动画 if (start == 90.0f || start == -90.0f) rotation.setAnimationListener(new DisplayNextView()); iv.startAnimation(rotation); } /** 动画监听器 **/ private final class DisplayNextView implements Animation.AnimationListener { @Override public void onAnimationEnd(Animation arg0) { flag = false; } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationStart(Animation arg0) { flag = true; } } /** 定时旋转线程 **/ private final class OnFlingListener extends Thread { private boolean isRunning = true; @Override public void run() { start = System.currentTimeMillis(); end = start; // 标识是否到达最后 boolean bol = false; while (isRunning) { end = System.currentTimeMillis(); // 如果没有动画正在进行且用户空闲操作时间超过3秒 if (!flag && (end - start > 3000)) { if (!bol) { if (currentScreenIndex < childCount - 1) { start = end; iHandler.sendEmptyMessage(RIGHT); } else if (currentScreenIndex == childCount - 1) { bol = true; } } else { if (currentScreenIndex > 0) { start = end; iHandler.sendEmptyMessage(LEFT); } else if (currentScreenIndex == 0) { bol = false; } } } } } // 关闭监听线程 @SuppressWarnings("unused") public void shutDown() { isRunning = false; } } /** 底部圆圈显示回调接口 **/ interface ScrollToScreenCallback { public void callback(int currentIndex); } }
PageControlView
package org.wp.activity; import org.wp.activity.MainActivity.ScrollToScreenCallback; import android.content.Context; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; public class PageControlView extends LinearLayout implements ScrollToScreenCallback { /** Context对象 **/ private Context context; /** 圆圈的数量 **/ private int count; public PageControlView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; } @Override public void callback(int currentIndex) { generatePageControl(currentIndex); } public void generatePageControl(int currentIndex) { this.removeAllViews(); for (int i = 0; i < this.count; i++) { ImageView iv = new ImageView(context); if (currentIndex == i) { iv.setImageResource(R.drawable.page_indicator_focused); } else { iv.setImageResource(R.drawable.page_indicator); } this.addView(iv); } } /** 设置圆圈数量 **/ public void setCount(int count) { this.count = count; } }
Rotate3dAnimation
package org.wp.activity; import android.graphics.Camera; import android.graphics.Matrix; import android.view.animation.Animation; import android.view.animation.Transformation; public class Rotate3dAnimation extends Animation { /** 开始旋转的角度 **/ private final float mFromDegrees; /** 旋转结束的角度 **/ private final float mToDegrees; /** 图片中心X坐标 **/ private final float mCenterX; /** 图片中心Y坐标 **/ private final float mCenterY; /** 视角 **/ private Camera mCamera; public Rotate3dAnimation(float fromDegrees, float toDegrees, float centerX, float centerY) { this.mFromDegrees = fromDegrees; this.mToDegrees = toDegrees; 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 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(); if (degrees >= 76.0f) { // 旋转角度大于76度保持90度 degrees = 90.0f; camera.save(); camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); } else if (degrees <= -76.0f) { // 旋转角度小于-76度保持-90度 degrees = -90.0f; camera.save(); camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); } else { camera.save(); // 缩小 camera.translate(0, 0, centerX); camera.rotateY(degrees); // 旋转产生偏移效果 camera.translate(0, 0, -centerX); camera.getMatrix(matrix); camera.restore(); } matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } }
anim
shake.xml
<?xml version="1.0" encoding="utf-8"?> <!-- fromXDelta x轴开始位置 toXDelta x轴结束位置 duration 执行时间 interpolator 动画变化率 --> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:toXDelta="10" android:duration="850" android:interpolator="@anim/cycle_5" />
cycle_5.xml
<?xml version="1.0" encoding="utf-8"?> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="5" />
发表评论
-
Android 自定义Gallery
2011-10-19 21:33 2919MainActivity package org.wp.ac ... -
Android 3D图片切换
2011-10-14 17:19 3495MainActivity package org.wp.ac ... -
Android C2DM
2011-10-07 16:36 2231AndroidC2DMDemo com.google. ... -
Android Ant
2011-10-03 20:31 2891build.xml <?xml version=&qu ... -
Android 电视关机动画
2011-09-14 13:28 1829MainActivity package org.wp.ac ... -
Android 图片倒影
2011-09-09 11:07 6297MainActivity package org.wp.ac ... -
Android 自定义滚动视图
2011-09-08 15:03 6857MainActivity package org.wp.ac ... -
Android 绘制心形
2011-09-06 15:18 6730MyLove package org.wp.activity ... -
Android 播放音频文件
2011-09-05 16:31 5821MainActivity package org.wp.ac ... -
Android 添加自定义SurfaceView
2011-08-29 17:19 7515MainActivity package org.wp.ac ... -
Android Looper
2011-08-28 11:10 2279LooperActivity package org.wp. ... -
Android AsyncTask
2011-08-27 15:21 1564AsyncTaskActivity package org. ... -
Android TimerTask
2011-08-26 22:16 4500TimerTaskActivity package org. ... -
Android Thread
2011-08-26 13:59 5607ThreadActivity package org.wp. ... -
Android 判断程序前后台状态
2011-08-25 13:26 6886AppStatusService package org.w ... -
注册界面
2011-08-23 20:57 1191MainActivity package org.wp.ac ... -
Android 半透明(二)
2011-08-18 20:02 1502TranslucentBlurActivity packag ... -
Android 半透明(一)
2011-08-18 17:08 1660TranslucentActivity package or ... -
游戏角色在屏幕行走
2011-08-18 11:32 1241MySurfaceView package org.wp.a ... -
Android SurfaceView基础
2011-08-17 15:01 1603MySurfaceView package org.wp.a ...
相关推荐
android gallery3d效果的简单实现 有遮盖 http://blog.csdn.net/kiritor/article/details/8701025
android Gallery3D 最新源码
Android Gallery 3D效果 非常好的伪3D效果...
android Gallery 3d 图片浏览 倒影 oom解决了 读取可获取内置外置sd卡中图片
Android Gallery3D 源码 已编译
仿iphone 的3d效果 加了特殊的效果 ,减少了锯齿的出现,超酷哦
Android Gallery 3D 优化过的
Android Gallery3D效果 教程 案例 代码
android Gallery3D 源码,已经编译过了。
android Gallery 3d实现无限循环播放 用做广告板最后了 有多种效果 有倒影 能无限循环播放 当滑动到最后的时候 能反过来播放
如果你想快速实现这个效果那么直接拷过去就可以运行了
Android控件开发之Gallery3D酷炫效果(带源码),功能简单,欢迎下载
glaaery3d android下的3d看图片工具
NULL 博文链接:https://zheyiw.iteye.com/blog/1563653
android 动态向Gallery中添加图片及倒影&&3D;效果 实现了gallery倒影及3D翻转效果
android gallery3d源码,我测试过了,可以正常运行,希望对大家有用。
android Gellary3d 源代码
Gallery3D源码分析
安卓Android源码——Gallery3D.zip