Android类似于滚动的通知栏实现

控件类似于网页上的滚动播报栏

图片1:


图片2:


如上图,实现滚动栏里多条消息的自切换;

点击后获取具体内容。

简单是实现代码:

public class PublicNoticeView extends LinearLayout {

	private static final String TAG = "LILITH"; 
	private Context mContext;
	private ViewFlipper viewFlipper;
	private View scrollTitleView;
	private Intent intent;
	
	Handler mHandler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			// TODO Auto-generated method stub
			switch (msg.what) {
			case 1:
				
				//bindNotices();
				break;

			case -1:
				break;
			}
		}
	};

	/**
	 * 构造
	 * @param context
	 */
	public PublicNoticeView(Context context) {
		super(context);
		mContext = context;
		init();	
	}
	

	public PublicNoticeView(Context context,AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
		init();
		
	}
	
	/**
	 * 网络请求后返回公告内容进行适配
	 */
	protected void bindNotices() {
		// TODO Auto-generated method stub
		viewFlipper.removeAllViews();
		int i = 0;
		while(i<5){
			String text = "公告:中奖了 5000w-------";
			TextView textView = new TextView(mContext);
			textView.setText(text);
			textView.setOnClickListener(new NoticeTitleOnClickListener(mContext,i+text));
			LayoutParams lp = new LinearLayout.LayoutParams(
					LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
			viewFlipper.addView(textView,lp);
			i++;
		}
	}


	private void init(){
		bindLinearLayout();
		Message msg = new Message();
		msg.what = 1;
		mHandler.sendMessageDelayed(msg, 3000);
		
	}

	/**
	 * 初始化自定义的布局
	 */
	public void bindLinearLayout() {
		scrollTitleView = LayoutInflater.from(mContext).inflate(
				R.layout.main_public_notice_title, null);
		LayoutParams layoutParams = new LinearLayout.LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
		addView(scrollTitleView, layoutParams);

		viewFlipper = (ViewFlipper) scrollTitleView
				.findViewById(R.id.flipper_scrollTitle);
		viewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_in_left));
		viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, android.R.anim.slide_out_right));
		viewFlipper.startFlipping();
		View v = viewFlipper.getCurrentView();
		
	}
	
	
	/**
	 * 获取公告资讯
	 */
	public void getPublicNotices(){
		//网络请求获取
	}
	
	/**
	 * 公告title监听
	 * @author Nono
	 *
	 */
	class NoticeTitleOnClickListener implements OnClickListener{
		private Context context;
		private String titleid;

		public NoticeTitleOnClickListener(Context context, String whichText){
			this.context = context;
			this.titleid = whichText;
		}
		public void onClick(View v) {
			// TODO Auto-generated method stub
			disPlayNoticeContent(context,titleid);
		}
		
	}

	/**
	 * 显示notice的具体内容
	 * @param context
	 * @param titleid
	 */
	public void disPlayNoticeContent(Context context, String titleid) {
		// TODO Auto-generated method stub
		Toast.makeText(context, titleid, Toast.LENGTH_SHORT).show();
		intent = new Intent(context, InformationContentActivity.class);
		intent.putExtra("tag", titleid);
		((Activity)context).startActivity(intent);
	}

}

代码简单分析:
1.构造初始化,默认无网络情况下客户端两条信息滚动(比如公司简介,网址,以及一些介绍)。因为改两条数据我是xml写死的。没做点击处理。
具体布局xml:

?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_marginRight="10dip" android:layout_height="fill_parent" android:src="@drawable/main_notice1" android:layout_gravity="center" android:gravity="center"/> <ViewFlipper android:layout_gravity="center" android:padding="5dip" android:id="@+id/flipper_scrollTitle" android:background="@drawable/main_notice_bg" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_margin="0.0dip" android:flipInterval="5000" android:layout_weight="1.0"> <TextView android:gravity="center" android:id="@+id/scrollTile_hd" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/default_notice1"/> <TextView android:gravity="center" android:id="@+id/scrollTile_hm" android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="@string/default_notice2" /> </ViewFlipper> </LinearLayout>

用ViewFliper作为滚动布局的root,5000秒滚动。至于上下滚,左右滚,效果可自定义;
2.网络请求获取数据:
public void getPublicNotices(){
//网络请求获取
}后,通过handler来刷新view
此处我模拟了一个
protected void bindNotices();
动态添加子view;
3.

protected void bindNotices() {
		// TODO Auto-generated method stub
		viewFlipper.removeAllViews();
		int i = 0;
		while(i<5){
			String text = "公告:中奖了 5000w-------";
			TextView textView = new TextView(mContext);
			textView.setText(text);
			textView.setOnClickListener(new NoticeTitleOnClickListener(mContext,i+text));
			LayoutParams lp = new LinearLayout.LayoutParams(
					LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
			viewFlipper.addView(textView,lp);
			i++;
		}
	}
 
 

绑定前,我是把默认的两个view去掉了。然后动态添加,并给每个view设置监听事件
点击可以以dialog或是activity显示具体的数据和内容。


基本代码如上


总结:1.自定义view;
2.简单的借助了viewflipper控件;
3.动态添加view;
4.点击事件;






--------csdn博客内容插入有点难搞。。第一次插入图片代码。。有点乱。
 
 


 
 
 
 
 
 
 
 
 
 
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值