- 浏览: 383007 次
最新评论
-
qq_19471875:
为了感谢楼主 我特意注册了一个账号!,谢谢!很实用!真棒
ViewPager刷新单个页面的方法 -
asdf658:
...
Eclipse安装server插件 -
JasonMichael:
多谢。搞定~
Eclipse安装server插件 -
passerby_whu:
应该是官网写错了。应该是144x144.
Android不太能够分辨率launcher icon的适配 -
zhengyong7232:
Create or replace function test ...
postgresql产生随机数和随机日期的存储过程
一个常见的效果:控件自动移入屏幕,停留几秒,再移出屏幕。项目中想做,但没找到合适的教程,于是自己写了一个工具类实现这个效果。本人初学android,实现方法肯定不是最优的,这只是一个没有办法的办法。构思很简单:两个动画,一个移入,一个移出,两个动画间插入一个计时器,以下是代码:
动画类(该类可以实现多个控件的同步动画,只要把所有控件传入构造方法即可,如果要执行不同的动画,各个控件单独调用就可以了,同时设置了一个开关用于控制是否执行“移出”的动作):
以上动画中用到了一个计时器类TimerManager,也是一个工具类,封装了一个计时器,可以单独用于计时器实例的取得:
用法很简单,只要构造MoveInAndOutAnim,并调用startAnim方法即可:
showAddressLL和mLocationIv就是我自己的两个控件,一个是LinearLayout一个是ImageView,我需要他们两个同步执行动画效果。
动画类(该类可以实现多个控件的同步动画,只要把所有控件传入构造方法即可,如果要执行不同的动画,各个控件单独调用就可以了,同时设置了一个开关用于控制是否执行“移出”的动作):
package net.jackie.util; import android.annotation.SuppressLint; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.view.animation.Animation.AnimationListener; /** * @author jackie * */ public class MoveInAndOutAnim { private static final String TAG = "MoveInAndOutAnim"; private int animDuration; private int fromXDelta; private int toXDelta; private int fromYDelta; private int toYDelt; private int keepDuration; private View[] views; private TranslateAnimation mMoveInAnim; private TranslateAnimation mMoveOutAnim; private TimerManager tm; private boolean processMoveOutAnim; /** * * @param animDuration Duration of animation * @param fromXDelta Change in X coordinate to apply at the start of the animation(generally 0) * @param toXDelta Change in X coordinate to apply at the end of the animation * (if you want to make a horizontal moving, move to right if positive value, move to left if negative value) * @param fromYDelta Change in Y coordinate to apply at the start of the animation(generally 0) * @param toYDelt Change in Y coordinate to apply at the end of the animation * (if you want to make a vertical moving, move to bottom if positive value, move to top if negative value) * @param keepDuration Duration to keep the Views displaying * @param processMoveOutAnim whether to process the move out animation * @param views Views to process the animation */ public MoveInAndOutAnim(int animDuration, int fromXDelta, int toXDelta, int fromYDelta, int toYDelt, int keepDuration, boolean processMoveOutAnim, View... views) { this.animDuration = animDuration; this.fromXDelta = fromXDelta; this.toXDelta = toXDelta; this.fromYDelta = fromYDelta; this.toYDelt = toYDelt; this.keepDuration = keepDuration; this.views = views; this.processMoveOutAnim = processMoveOutAnim; initMoveOutAnim(); initMoveInAnim(); initTimer(); } private void initMoveInAnim() { mMoveInAnim = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelt); mMoveInAnim.setDuration(animDuration); mMoveInAnim.setFillAfter(true); mMoveInAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { if (processMoveOutAnim) { tm.startTimer(); } } @Override public void onAnimationRepeat(Animation animation) { } }); } private void initMoveOutAnim() { mMoveOutAnim = new TranslateAnimation(toXDelta, fromXDelta, toYDelt, fromYDelta); mMoveOutAnim.setDuration(animDuration); mMoveOutAnim.setFillBefore(true); mMoveOutAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { clearAnim(); } @Override public void onAnimationRepeat(Animation animation) { } }); } @SuppressLint("HandlerLeak") private void initTimer() { // Initial timer to control closing of 'Too Short' dialog // In fact, delay controls how long to keep the Views, so do not set it to 0 tm = new TimerManager(keepDuration, keepDuration); Handler mHandler = new Handler() { @Override public void handleMessage( Message msg) { super.handleMessage(msg); switch(msg.what) { case TimerManager.LOAD_PROGRESS : for(View view : views) { view.startAnimation(mMoveOutAnim); } tm.closeTimer(); break; case TimerManager.CLOSE_PROGRESS : // Do nothing Log.d(TAG, "Timer for 'Keep View' is closed."); break; } } }; tm.setHandler(mHandler); } public void startAnim() { for(View view : views) { view.startAnimation(mMoveInAnim); } } private void clearAnim() { for(View view : views) { view.clearAnimation(); } } }
以上动画中用到了一个计时器类TimerManager,也是一个工具类,封装了一个计时器,可以单独用于计时器实例的取得:
package net.jackie.util; import java.util.Timer; import java.util.TimerTask; import android.os.Handler; import android.os.Message; /** * Generate a timer object with specified 'delay' and 'period', * you can handle events with 'TimerManager.LOAD_PROGRESS' * and 'TimerManager.CLOSE_PROGRESS', then do your progress. * If you want to get 'timerId', just get it from 'arg1' * * @author jackie * */ public class TimerManager { private Handler mHandler; /** Timer **/ private Timer timer = null; /** TimerTask **/ private TimerTask timerTask = null; /** Delay Time in milliseconds **/ private int mDelay; /** Period in milliseconds **/ private int mPeriod; /** Timer in progressing flag **/ public static final int LOAD_PROGRESS = 0; /** Timer close flag **/ public static final int CLOSE_PROGRESS = 1; /** TimerId **/ private int mTimerId = 0; public TimerManager(int delay, int period) { this.mDelay = delay; this.mPeriod = period; } /** * * @param handler your own handler to handle the events from this timer * @param delay amount of time in milliseconds before first execution * @param period amount of time in milliseconds between subsequent executions */ public TimerManager(Handler handler, int delay, int period) { this.mHandler = handler; this.mDelay = delay; this.mPeriod = period; } public void startTimer() { if (timerTask == null) { timerTask = new TimerTask() { @Override public void run() { Message msg = new Message(); msg.what = LOAD_PROGRESS; msg.arg1 = (int) (++mTimerId); if (mHandler != null) { mHandler.sendMessage(msg); } } }; timer = new Timer(); timer.schedule(timerTask, mDelay, mPeriod); } } public void closeTimer() { if (timer != null) { timer.cancel(); timer = null; } if (timerTask != null) { timerTask = null; } mTimerId = 0; if (mHandler != null) { mHandler.sendEmptyMessage(CLOSE_PROGRESS); } } public void setHandler(Handler handler) { this.mHandler = handler; } }
用法很简单,只要构造MoveInAndOutAnim,并调用startAnim方法即可:
MoveInAndOutAnim anim = new MoveInAndOutAnim( ANIMATION_DURATION, 0, 0, 0, topBarHeight, SHOW_ADDRESS_DELAY, true, showAddressLL, mLocationIv); anim.startAnim();
showAddressLL和mLocationIv就是我自己的两个控件,一个是LinearLayout一个是ImageView,我需要他们两个同步执行动画效果。
发表评论
-
Cocos2dx开发解决undefined reference to 'atof'和x86平台下报internal compiler error的错误
2016-11-21 17:10 2785最近在为游戏做java sdk的cocos2dx引擎层代码时遇 ... -
Android项目集成Jenkins(JUnit test & Coverage)
2016-08-26 14:12 4371为了实现持续集成,提 ... -
Android短信监听功能(解决onChange触发两次的问题)
2016-06-16 18:51 6856前言 项目要做短信验证码自动填充的功能,基本上两种方法:Con ... -
Android实现可自动关闭的定时器
2015-12-03 18:54 1407之前一篇文章里有用到过一个封装好的定时器工具类,现在又做了一些 ... -
Android不太能够分辨率launcher icon的适配
2015-04-24 11:01 1912网上讲android适配不同分辨率的文章很多,但是很少有说明不 ... -
Android 根据屏幕尺寸适配控件尺寸(按比例缩放)
2015-04-03 18:28 4639在做facebook登录时,正好看到其SDK中一段代码,可以根 ... -
Android获取状态栏高度
2015-01-28 12:04 1196获取状态栏高度有两种方法: 1.如果是在Activity中: ... -
Apktool打包和解包
2014-12-02 17:49 0本文的学习内容参考自[Android实例] 【eoeAndro ... -
Google Map 如何捕获onTouchEvent
2014-09-02 17:42 1715当我的项目中需要捕获google map的touch事件时,才 ... -
Android日期时间选择器实现以及自定义大小
2014-08-27 20:01 62560本文主要讲两个内容:1.如何将DatePicker和TimeP ... -
ViewPager刷新单个页面的方法
2014-08-22 11:09 39094使用ViewPager做滑动切换图片的效果时,如果图片是从 ... -
Android使用MediaPlayer开发时抛IllegalStateException
2014-08-18 16:45 59802在我开发的语音播放程序中,首次播放语音没问题,第二次播放时 ... -
Android 含有图片和文字的Button的实现
2014-07-17 20:15 8856要实现一个同时包含图片和文字的按钮,粗糙一点的做法当然是直 ... -
LinearLayout半透明效果
2014-07-16 18:12 17431透明效果有很多中实现方式,可以代码实现,也可以直接在布局文件中 ... -
Android图片压缩(质量压缩和尺寸压缩)
2014-07-04 18:16 4220在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩: ... -
Google Map无法显示:Error contacting Google servers. XXX authentication issue
2014-06-30 20:32 2083在开发google map时遇到的问题: 06-26 14 ... -
【转载】Android异步处理
2013-06-20 12:12 887关于Android异步处理的一整个系列的博文,共有4篇,博主写 ... -
android 写log到文件
2013-06-14 17:31 14216网上找的一个很强大的实现方法,原网页的链接找不到了,没法转载, ... -
android service被系统回收的解决方法
2013-06-14 11:20 7219自己的app的service总是容 ... -
Android 中的 Service 全面总结
2013-06-13 16:42 898关于Android Service的知识,可以参考以下博文,内 ...
相关推荐
image没有鼠标移出的属性、 所以利用mousemove属性实现 鼠标移入移出换图
易语言根据句柄判断鼠标移入控件事件源码,根据句柄判断鼠标移入控件事件
仿QQ好友动态添加说说、图片菜单滑动移进移出效果--在指定控件下面显示popupwindow动画不移效果
http://blog.csdn.net/amazing_alex/article/details/44872921 demo简化
android 控件 水波效果
Android 表格控件-动态实现表格效果(内容、样式可扩展),参考博客:http://blog.csdn.net/daijin888888/article/details/50159579
新增鼠标单击、移入、移出颜色变化功能,在属性表中可以找到 【Label】 开启自适应微软雅黑字体,如果可以将尝试使用微软雅黑字体而不是丑陋的宋体 新增鼠标单击、移入、移出颜色变化功能,在属性表中可以找到 ...
http://blog.csdn.net/amazing_alex/article/details/44872921
本文主要记录Android控件设置阴影 给控件设置阴影,会使得界面元素更好看一写,google 给我们提供了一个现成的控CardView,可以将CardView看做是FrameLayout在自身之上添加了圆角和阴影效果 本文是使用给控件设置...
android控件的抖动效果, 可以实现上下,左右抖动效果
Android 自定义自动换行布局控件
这个Demo主要实现如何将Android下几个原生的控件封装到一起,产生一个新的控件,称之为“android自定义组合控件”,这种控件可以简化代码,大家有空下载看看吧,谢谢!
Android 流程步骤控件,实现对提交资料的时候,分部的流程控制
android完美下拉框控件android完美下拉框控件android完美下拉框控件android完美下拉框控件
Android_自定义控件_eBook_翻书效果
(android控件) ImageView 控件开发效果总结 (多组滤镜效果)源码下载
Android动态点点省略号效果的等待控件,可直接运行查看效果
Android UI控件组件库集合【源码】 热门标签,流式布局,刮刮乐控件,侧滑控件,循环幻灯片控件,自动换行控件,下拉列表,圆角进度控件等常用UI控件组件合集
Android 控件抖动效果
该banner(自动滚动广告图)使用viewPager实现,可兼容在viewpager中显示