热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

Android自定义控件ViewFipper实现竖直跑马灯效果

这篇文章主要为大家详细介绍了Android自定义控件ViewFipper实现竖直跑马灯效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一直想实现一个竖直跑马灯的效果,今天接触到了ViewFlipper这个控件, 是做安卓视图切换的,  对其用自定义控件进行包装;实现其点击回调和自定义视图等功能

不多说,直接上代码:

定义了一个自定义控件,  继承LinearLayout

package com.example.viewfipperdemo; 
 
import android.content.Context; 
import android.util.AttributeSet; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.ViewFlipper; 
 
/** 
 * Created by zmybi on 2017/1/19. 
 */ 
 
public class MarqueeTextView extends LinearLayout { 
 
 private Context mContext; 
 private String[] strs; 
 private View mView; 
 
 private OnTextClickListener mOnTextClickListener; 
 private ViewFlipper mViewFlipper; 
 
 
 public MarqueeTextView(Context context) { 
  this(context,null); 
  this.mCOntext= context; 
 } 
 
 public MarqueeTextView(Context context, AttributeSet attrs) { 
  super(context, attrs); 
  this.mCOntext= context; 
 
  initBasicView(); 
 } 
 
 /** 
  * 用于外界向里面传值,并且初始化控件中的ViewFipper 
  * @param str 
  * @param onTextClickListener 
  */ 
 public void setData(String[] str,OnTextClickListener onTextClickListener) { 
  this.strs = str; 
  this.mOnTextClickListener= onTextClickListener; 
  initViewFipper(); 
 } 
 
 
 
 private void initBasicView() { 
  mView = LayoutInflater.from(mContext).inflate(R.layout.layout_viewfipper,null); 
  mViewFlipper = (ViewFlipper) mView.findViewById(R.id.viewflipper); 
 
  mViewFlipper.setInAnimation(mContext,R.anim.in); //进来的动画 
  mViewFlipper.setOutAnimation(mContext,R.anim.out); //出去的动画 
 
  LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
  addView(mView,params); 
 
  mViewFlipper.startFlipping(); 
 } 
 
 /** 
  * 定义销毁的方法 
  */ 
 public void clearViewFlipper() { 
  if(mView != null) { 
   if(mViewFlipper != null) { 
    mViewFlipper.stopFlipping(); 
    mViewFlipper.removeAllViews(); 
    mViewFlipper =null; 
   } 
   mView = null; 
  } 
 } 
 
 
 /** 
  * 初始化viewFipper中的自孩子视图 
  */ 
 private void initViewFipper() { 
  if(strs.length == 0) { 
   return; 
  } 
 
  int i = 0; 
  mViewFlipper.removeAllViews(); 
  while (i 

给viewFlipper设置动画的写法:

in.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
 
  
  
 
 

out.xml:

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
 
  
  
 
 

我们看一下layout_viewflipper布局的写法:

<&#63;xml version="1.0" encoding="utf-8"&#63;> 
 
 
  
 
 

其中flipInterval  是决定切换的时间的

我们再来看看MainActivity中的代码:

package com.example.viewfipperdemo; 
 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.Toast; 
 
public class MainActivity extends AppCompatActivity { 
 
 /** 
  * 自定义的可滚动的TextView 
  */ 
 private MarqueeTextView mMarqueeTextView; 
 
 private String[] str = {"我是1","我是2","我是3"}; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity_main); 
 
  mMarqueeTextView = (MarqueeTextView) findViewById(R.id.marqueetextview); 
 
  mMarqueeTextView.setData(str, new OnTextClickListener() { 
   @Override 
   public void onClick(View view) { 
    Toast.makeText(MainActivity.this,((TextView)view).getText(),Toast.LENGTH_LONG).show(); 
   } 
  }); 
 } 
 
 @Override 
 protected void onDestroy() { 
  super.onDestroy(); 
  mMarqueeTextView.clearViewFlipper(); 
 } 
} 

对了,还定义了一个接口:

package com.example.viewfipperdemo; 
 
import android.view.View; 
 
/** 
 * Created by zmybi on 2017/1/19. 
 */ 
 
public interface OnTextClickListener { 
 
 void onClick(View view); 
} 

至此,如上的竖直跑马灯就完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
author-avatar
mobiledu2502878013
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有