Android 滚动的公告栏

实现的效果:

是一个滚动的公告栏,是这样的:



可以看到这个公告栏一方面是滚动,另外一方面是可点击。


实现的思路:

1.textView放在ViewFlipper中实现滑动效果(可设置左右、或者上下滚动),很明显这应该是自定义view;

2.利用textView的点击事件即可实现点击;


OK,先看看自定义view的代码:

[java]  view plain  copy
  1. public class MarqueeTextView extends LinearLayout {  
  2.   
  3.     private Context mContext;  
  4.     private ViewFlipper viewFlipper;  
  5.     private View marqueeTextView;  
  6.     private String[] textArrays;  
  7.     private MarqueeTextViewClickListener marqueeTextViewClickListener;  
  8.   
  9.     public MarqueeTextView(Context context) {  
  10.         super(context);  
  11.         mContext = context;  
  12.         initBasicView();  
  13.     }  
  14.   
  15.   
  16.     public MarqueeTextView(Context context, AttributeSet attrs) {  
  17.         super(context, attrs);  
  18.         mContext = context;  
  19.         initBasicView();  
  20.     }  
  21.   
  22.     public void setTextArraysAndClickListener(String[] textArrays, MarqueeTextViewClickListener marqueeTextViewClickListener) {//1.设置数据源;2.设置监听回调(将textView点击事件传递到目标界面进行操作)  
  23.         this.textArrays = textArrays;  
  24.         this.marqueeTextViewClickListener = marqueeTextViewClickListener;  
  25.         initMarqueeTextView(textArrays, marqueeTextViewClickListener);  
  26.     }  
  27.   
  28.     public void initBasicView() {//加载布局,初始化ViewFlipper组件及效果  
  29.         marqueeTextView = LayoutInflater.from(mContext).inflate(R.layout.marquee_textview_layout, null);  
  30.         LayoutParams layoutParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);  
  31.         addView(marqueeTextView, layoutParams);  
  32.         viewFlipper = (ViewFlipper) marqueeTextView.findViewById(R.id.viewFlipper);  
  33.         viewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_in_bottom));//设置上下的动画效果(自定义动画,所以改左右也很简单)  
  34.         viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.slide_out_top));  
  35.         viewFlipper.startFlipping();  
  36.     }  
  37.   
  38.     public void initMarqueeTextView(String[] textArrays, MarqueeTextViewClickListener marqueeTextViewClickListener) {  
  39.         if (textArrays.length == 0) {  
  40.             return;  
  41.         }  
  42.   
  43.         int i = 0;  
  44.         viewFlipper.removeAllViews();  
  45.         while (i < textArrays.length) {  
  46.             TextView textView = new TextView(mContext);  
  47.             textView.setText(textArrays[i]);  
  48.             textView.setOnClickListener(marqueeTextViewClickListener);  
  49.             LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);  
  50.             viewFlipper.addView(textView, lp);  
  51.             i++;  
  52.         }  
  53.     }  
  54.   
  55.     public void releaseResources() {  
  56.         if (marqueeTextView != null) {  
  57.             if (viewFlipper != null) {  
  58.                 viewFlipper.stopFlipping();  
  59.                 viewFlipper.removeAllViews();  
  60.                 viewFlipper = null;  
  61.             }  
  62.             marqueeTextView = null;  
  63.         }  
  64.     }  
  65.   
  66. }  


然后,主Activity异常简单(还是封装得好):

[java]  view plain  copy
  1. public class MainActivity extends AppCompatActivity {  
  2.     private MarqueeTextView marqueeTv;  
  3.     private String [] textArrays = new String[]{"this is content No.1","this is content No.2","this is content No.3"};  
  4.   
  5.     @Override  
  6.     protected void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.activity_main);  
  9.         marqueeTv = (MarqueeTextView) findViewById(R.id.marqueeTv);  
  10.   
  11.         marqueeTv.setTextArraysAndClickListener(textArrays, new MarqueeTextViewClickListener() {  
  12.             @Override  
  13.             public void onClick(View view) {  
  14.                 startActivity(new Intent(MainActivity.this,AnotherActivity.class));  
  15.             }  
  16.         });  
  17.     }  
  18.   
  19.     @Override  
  20.     protected void onDestroy() {  
  21.         marqueeTv.releaseResources();  
  22.         super.onDestroy();  
  23.     }  
  24. }  

Git地址>>
文章来源:http://blog.csdn.net/ganshenml/article/details/53384939
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值