- 浏览: 385940 次
最新评论
-
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 2883最近在为游戏做java sdk的cocos2dx引擎层代码时遇 ... -
Android项目集成Jenkins(JUnit test & Coverage)
2016-08-26 14:12 4438为了实现持续集成,提 ... -
Android短信监听功能(解决onChange触发两次的问题)
2016-06-16 18:51 6947前言 项目要做短信验证码自动填充的功能,基本上两种方法:Con ... -
Android实现可自动关闭的定时器
2015-12-03 18:54 1462之前一篇文章里有用到过一个封装好的定时器工具类,现在又做了一些 ... -
Android不太能够分辨率launcher icon的适配
2015-04-24 11:01 1946网上讲android适配不同分辨率的文章很多,但是很少有说明不 ... -
Android 根据屏幕尺寸适配控件尺寸(按比例缩放)
2015-04-03 18:28 4685在做facebook登录时,正好看到其SDK中一段代码,可以根 ... -
Android获取状态栏高度
2015-01-28 12:04 1233获取状态栏高度有两种方法: 1.如果是在Activity中: ... -
Apktool打包和解包
2014-12-02 17:49 0本文的学习内容参考自[Android实例] 【eoeAndro ... -
Google Map 如何捕获onTouchEvent
2014-09-02 17:42 1760当我的项目中需要捕获google map的touch事件时,才 ... -
Android日期时间选择器实现以及自定义大小
2014-08-27 20:01 62617本文主要讲两个内容:1.如何将DatePicker和TimeP ... -
ViewPager刷新单个页面的方法
2014-08-22 11:09 39179使用ViewPager做滑动切换图片的效果时,如果图片是从 ... -
Android使用MediaPlayer开发时抛IllegalStateException
2014-08-18 16:45 60056在我开发的语音播放程序中,首次播放语音没问题,第二次播放时 ... -
Android 含有图片和文字的Button的实现
2014-07-17 20:15 8935要实现一个同时包含图片和文字的按钮,粗糙一点的做法当然是直 ... -
LinearLayout半透明效果
2014-07-16 18:12 17536透明效果有很多中实现方式,可以代码实现,也可以直接在布局文件中 ... -
Android图片压缩(质量压缩和尺寸压缩)
2014-07-04 18:16 4275在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩: ... -
Google Map无法显示:Error contacting Google servers. XXX authentication issue
2014-06-30 20:32 2124在开发google map时遇到的问题: 06-26 14 ... -
【转载】Android异步处理
2013-06-20 12:12 932关于Android异步处理的一整个系列的博文,共有4篇,博主写 ... -
android 写log到文件
2013-06-14 17:31 14313网上找的一个很强大的实现方法,原网页的链接找不到了,没法转载, ... -
android service被系统回收的解决方法
2013-06-14 11:20 7278自己的app的service总是容 ... -
Android 中的 Service 全面总结
2013-06-13 16:42 936关于Android Service的知识,可以参考以下博文,内 ...
相关推荐
在这个"VB image鼠标移入移出换图"的主题中,我们将探讨如何利用VB的image控件以及鼠标事件来实现这一功能。 首先,VB中的Image控件是一个用于显示静态图像的组件,它支持多种图像格式,如BMP、JPEG、GIF等。Image...
本篇文章将详细讲解如何在易语言中捕获鼠标事件,尤其是判断鼠标移入和移出事件。 首先,我们需要了解易语言中的“窗口矩形”概念。窗口矩形是指窗口在屏幕上的边界范围,通常由窗口的左上角坐标和右下角坐标定义。...
在易语言中,"鼠标移入移出事件"是编程中常见的交互功能,主要用于处理用户通过鼠标与界面元素的交互行为。本文将深入探讨易语言中的鼠标移入和移出事件,以及如何利用这些事件来增强程序的用户体验。 首先,我们...
要实现滑动移入移出的效果,我们需要使用Android的动画框架。动画框架提供了AlphaAnimation(透明度动画)、TranslateAnimation(位移动画)等多种动画类型。AlphaAnimation用于改变视图的透明度,而...
在图形用户界面(GUI)中,当鼠标指针进入或离开特定控件或窗口时,系统会触发相应的鼠标移入或移出事件。这些事件允许程序员在用户与界面交互时执行特定的操作,比如改变控件的外观、显示提示信息或者执行某项功能...
在IT领域,鼠标移入移出事件是用户交互设计中的基本元素,主要用于增强用户体验和实现特定功能。在本文中,我们将深入探讨“鼠标移入移出事件模块”的系统结构、核心概念以及如何在实际编程中应用这些事件。 一、...
在易语言中,虽然内建的事件处理并不包含鼠标移入和移出事件,但在实际编程过程中,我们可以通过调用API(应用程序接口)函数来实现这些功能。在"易语言鼠标移入移出事件模块源码"这个压缩包中,包含了模块、模块...
在PyQt5中,开发GUI应用程序时,我们有时需要对窗口进行自定义设计,比如创建一个自定义的标题栏,实现鼠标移入移出时的效果切换,以及点击标题栏可以切换窗口界面。以下是对这些功能的详细解释和实现方法。 首先,...
总之,创建一个Android自动滚动的Banner控件,主要涉及ViewPager的使用、适配器的实现以及定时器的设置。通过合理的设计和第三方库的集成,我们可以轻松地实现这一功能,并提供良好的用户体验。在实际项目中,还需要...
新增鼠标单击、移入、移出颜色变化功能,在属性表中可以找到 【Label】 开启自适应微软雅黑字体,如果可以将尝试使用微软雅黑字体而不是丑陋的宋体 新增鼠标单击、移入、移出颜色变化功能,在属性表中可以找到 ...
本教程将探讨如何利用Android的自定义View或者现有的布局控件,如LinearLayout、TableLayout、GridLayout等,来实现一个可扩展内容和样式的表格控件。我们将主要关注以下几个方面: 1. **TableLayout基础**: ...
- **android:translationX** 和 **android:translationY**: 这两个属性可以用来平移视图,常用于滑动效果的实现。 在实际开发中,我们还可以利用Property Animation API或者ObjectAnimator来实现更复杂的滑动动画。...
本知识点将详细介绍如何在Android中实现一个具有3D翻页效果的倒计时控件。这个控件不仅能够显示倒计时,还能通过上下翻转增加视觉吸引力,提升用户体验。 首先,我们需要理解倒计时控件的基本原理。在Android中,倒...
** 功能描述:ToolStrip控件左右拖拽移动效果实现 * 主窗体下部添加一个Panel乘放ToolStrip控件以实现ToolStrip在窗体下部定位。 * 当ToolStrip控件中子控件超出屏幕时,拖动控件可以实现滑动效果。拖动到控件...
总的来说,实现Android控件的抖动效果涉及到对Android动画系统的理解,以及选择合适的实现方式。无论是视图动画还是属性动画,或者使用第三方库,都能帮助开发者创造出生动有趣的用户界面。在实际项目中,根据目标...
这个控件可能扩展了Android的ExpandableListView或自定义了一个ViewGroup,实现了自定义的布局和交互效果。通过阅读和学习这段代码,开发者可以更深入地理解如何在Android中实现自定义控件,并应用于自己的项目中。 ...
这个"Android UI控件组件库集合【源码】"提供了多种常用的UI控件及其源代码,旨在帮助开发者构建更加美观、功能丰富的应用界面。下面我们将详细探讨这些控件以及它们在实际开发中的应用。 1. **流式布局...
在GUI编程中,当鼠标进入或离开一个控件或窗口时,会触发相应的鼠标移入(Enter)和移出(Leave)事件。在易语言中,开发者可以通过监听这些事件来改变界面状态,比如高亮显示某个按钮,或者隐藏显示某些提示信息。...
总结来说,Android动态点点省略号闪烁效果的等待控件是通过自定义View实现的,主要涉及XML布局定义、Java代码实现动态效果以及在Activity中使用这三个部分。开发者可以根据自己的需求灵活调整,以适应各种应用场景。
`LineBreakLayout`是一个专门用于实现自动换行标签效果的自定义控件,它解决了在一个有限的宽度内显示多个标签,并且能根据屏幕大小自动调整布局,使标签能够整齐、美观地换行显示。在本文中,我们将深入探讨`...