,,Android自定义ViewFlipper实现滚动效果

,,Android自定义ViewFlipper实现滚动效果

这篇文章主要为大家详细介绍了机器人自定义取景器实现滚动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了自定义视角实现了类似百度手机助手,首页评论滚动效果。

看效果:

可交换的图像格式做的不好,其效果就是:几个查看项目不停的向上滚动,新加入项目有个淡入的效果。

说下实现思路:自定义视角继承至线性布局,控制项目数量及其动画效果,实现项目复用,传入数据即可,使用方便。

代码:

/**

*陶建。杨(姓氏)

*

* @描述仿百度手机助手,评论滚动效果

* @time 2015/1/16 17:37

*/

公共类取景器扩展线性布局{

private final int MAX _ SHOW _ ITEM _ SIZE=5;

私有IAdapter mIAdapter

私有int mCount

//最后一个项目动画

私人动画mLastOneAnimation

//其它项目动画

私人动画mCommonAnimation

//数据下标

私有int mCurrentIndex

/**

* 这里动画时间是1600毫秒,所以间隔得大于动画时间

*/

私有静态final int DEFAULT _ INTERVAL=2000

private int mFlipInterval=DEFAULT _ INTERVAL;

private boolean mAutoStart=false;

私有布尔mRunning=false

私有布尔mStarted=false

私有布尔mVisible=false

私有布尔mUserPresent=true

公共视图鳍状肢(上下文上下文){

超级(上下文);

初始化(上下文);

}

公共视图指示器(上下文上下文,属性集属性){

超级(上下文,attrs);

初始化(上下文);

}

公共视图flipper(Context Context,AttributeSet attrs,int defStyleAttr) {

super(context,attrs,defStyleAttr);

初始化(上下文);

}

专用最终广播接收器mReceiver=新广播接收器(){

@覆盖

公共接收时无效(上下文语境,意图意图){

最终字符串行动=意图。get action();

如果(意图动作_屏幕_关闭。等于(动作)){

mUserPresent=false

更新运行();

} else if(意图动作_用户_当前。等于(动作)){

mUserPresent=true

更新运行(假);

}

}

};

@覆盖

受保护的void onAttachedToWindow() {

超级棒。onattachedtowindow();

//侦听与用户状态相关的广播

最终意图过滤器filter=新意图过滤器();

filter.addAction(Intent .ACTION _ SCREEN _ OFF);

filter.addAction(Intent .ACTION _ USER _ PRESENT);

//好吧,这很恶心,但很有必要。该类由

//远程视图机制,作为远程视图的一部分

//可以由另一个没有应用程序的用户的上下文来放大

//具有交互用户权限-仅用于加载资源。

//例如,将用户配置文件中的小部件添加到

//主屏幕。因此,我们将接收器注册为当前

//用户不是上下文所针对的用户。

getContext()。registerReceiver(mReceiver,filter);

if (mAutoStart) {

//请求时自动启动

开始翻转();

}

}

@覆盖

受保护的void ondechedfromwindow(){

超级棒。ondechedfromwindow();

mVisible=false

getContext()。注销接收者(mReceiver);

更新运行();

}

@覆盖

受保护的void onWindowVisibilityChanged(int visibility){

超级棒。onwindowvisibilitychanged(可见性);

mVisible=visibility==VISIBLE

更新运行(mv isible);

//更新运行(false);

}

私有空的初始化(上下文上下文){

这个。设置方向(线性布局.垂直);

}

public void setIAdapter(IAdapter IAdapter){

这个。mi适配器=I适配器;

initShowItems();

}

public void startFlipping() {

mStarted=true

更新运行();

}

公共void stopFlipping() {

mStarted=false

更新运行();

}

私有void updateRunning() {

更新运行(真);

}

/**

*如果子视图正在翻转,则返回没错。

*/

public boolean isFlipping() {

返回mStarted

}

/**

*设置此视图在以下情况下是否自动调用{@link #startFlipping()}

*贴在窗户上。

*/

public void setAutoStart(布尔自动启动){

mAutoStart=自动启动;

}

/**

*如果此视图自动调用{@link #startFlipping()},则返回真实的

*当它附着在窗户上时。

*/

public boolean isAutoStart() {

返回mAutoStart

}

@覆盖

公共void onInitializeAccessibilityEvent(AccessibilityEvent事件){

超级棒。oninitializeaccessibilityevent(事件);

事件。设置类名(查看flipper。班级。getname());

}

@覆盖

public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo){

超级棒。oninitializeaccessibilitynodeinfo(info);

信息。设置类名(查看flipper。班级。getname());

}

/**

* 初始化子视图

*/

私有void initShowItems() {

如果(mIAdapter!=null) {

mCount=mi适配器。get count();

for(int I=0;i mCounti ) {

if (i==MAX_SHOW_ITEM_SIZE) {

打破;

}

view convert view=get child at(I);

查看项目=mi适配器。getitem视图(convert view,I);

addView(item,I);

}

}

}

/**

*基于内部方法启动或停止调度flip {@link android.os.Message}

*在{@link #mRunning}上和{@link #mVisible}状态。

*

* @param flipNow确定是否现在执行动画,在

*除了排队未来翻转。如果省略,则默认为

*没错。

*/

私有void更新正在运行(立即布尔翻转){

布尔running=m visible m started muser present;

系统。出去。println(' update running running:' running ' m visible ' m visible ' user present ' muser present);

如果(跑步!=mRunning) {

如果(正在运行(mCount MAX_SHOW_ITEM_SIZE)) {

showItems(mCurrentIndex,现在翻转);

消息MSG=mhandler。获取消息(FLIP _ MSG);

mhandler。sendmessage延迟(msg,mFlipInterval);

}否则{

mhandler。删除消息(FLIP _ MSG);

}

mRunning=正在运行;

}

}

私有无效显示项目(最终(同Internationalorganizations)国际组织位置,布尔动画){

if(animate(mlastone animation==null | | mCommonAnimation==null)){

mlastone animation=动画工具。加载动画(获取上下文(),r . anim。lastone _ anim);

mCommonAnimation=动画实用程序。加载动画(获取上下文(),r . anim。common _ anim);

}

int子计数=get子计数();

for(int I=0;我数孩子;i ) {

view child=get child at(I);

孩子。清除动画();

int索引=位置我;

child=miadapter。getitemview(child,(index=mIAdapter.getCount())?(索引-miadapter。get count()):index);

如果(动画){

if (i==childCount - 1) {

孩子。设置动画(mlastone动画);

}否则{

孩子。设置动画(mCommonAnimation);

}

}

child.setVisibility(视图。可见);

}

如果(动画){

mcommonanimation。立即开始();

mlastone动画。立即开始();

}

//保证传入的位置小于获取计数

if(mCurrentIndex=mi适配器。get count()){

mCurrentIndex=0;

}

}

private final int FLIP _ MSG=1;

私有最终处理程序mHandler=new Handler() {

@覆盖

公共void handleMessage(消息消息){

if (msg.what==FLIP_MSG) {

if (mRunning) {

showItems(mCurrentIndex,true);

MSG=获取消息(FLIP _ MSG);

sendMessageDelayed(msg,mFlipInterval);

}

}

}

};

公共接口适配器{

/**

* @param convertView

* @param位置

* @返回

*/

public View getitem View(视图转换视图,int位置);

/**

* @返回数据数数

*/

public int getCount();

}

}

再来看看调用部分:

公共类主要活动扩展ActionBarActivity实现视图翻转器.IAdapter {

视图翻转器视图翻转器

@覆盖

受保护的void onCreate(Bundle saved instancestate){

超级棒。oncreate(savedInstanceState);

setContentView(r . layout。活动_主);

view flipper=(view flipper)findViewById(r . id。view _ flipper);

查看脚蹼。setia dapter(这个);

}

@覆盖

受保护的void onResume() {

超级棒。on resume();

查看脚蹼。开始翻转();

}

@覆盖

公共视图getItemView(View convertView,int position) {

视图项目=null

TextView文本视图;

if (convertView==null) {

item=View.inflate(this,R.layout.item,null);

}否则{

item=convertView

}

textView=(textView)item . findviewbyid(r . id . textView);

TextView.setText('测试数据:'位置');

退货项目;

}

@覆盖

public int getCount() {

返回8;

}

}

可以看到MainActivity实现了ViewFlipper。IAdapter接口,设置好适配器后就可以调用startFlipper了。

这里就不贴布局文件了,附上工程源代码。项目里的动画时间有点长,修改一下没问题。

限于水平有限,缺点在所难免。我希望你放弃你的改正,和你一起鼓励我。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • windowsandroid手机版下载,windowsandroid安装apk
  • windowsandroid手机版下载,windowsandroid安装apk,WindowsAndroid 安装教程详解
  • android调用webview方法,androidwebview是什么,Android 中 WebView 的基本用法详解
  • android传感器高级编程,Android传感器,Android编程之光线传感器用法详解
  • android.app.Dialog,android自定义dialog对话框,Android开发笔记之-Dialog的使用详解
  • android 图片视频轮播框架,androidlayout轮播图,Android实现炫酷轮播图效果
  • android里的viewpager,安卓自定义view流程,Android自定义引导玩转ViewPager的方法详解
  • android里的viewpager,android viewpager详解
  • android里的viewpager,android viewpager详解,Android自定义超级炫酷的ViewPage指示器
  • android调用webview方法,androidwebview是什么
  • android设置控件宽度,android获取屏幕宽度和高度
  • android设置控件宽度,android获取屏幕宽度和高度,Android中获取控件宽高的4种方法集合
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程
  • android蓝牙开发的基本流程,安卓蓝牙app开发教程,android蓝牙简单开发示例教程
  • android菜单栏,android菜单控件
  • 留言与评论(共有 条评论)
       
    验证码: