Android自定义View之组合控件 ---- LED数字时钟

Android自定义View之组合控件 ---- LED数字时钟

先上图

LEDView效果如图所示。

之前看到一篇博客使用两个TextView实现了该效果,于是我想用自定义控件的方式实现一个LEDView,使用时即可直接使用该控件。

采用组合控件的方式,将两个TextView叠放在一起,再使用digital-7.ttf字体来显示数据,从而达到LED的效果。代码如下:

LEDView.class

 

package ione.zy.demo;

网易新闻import java.io.File;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

public class LEDView extends LinearLayout {

	private TextView timeView;
	private TextView bgView;
	private static final String FONT_DIGITAL_7 = fonts + File.separator
			+ digital-7.ttf;

	private static final String DATE_FORMAT = %02d:%02d:%02d;
	private static final int REFRESH_DELAY = 500;

	private final Handler mHandler = new Handler();
	private final Runnable mTimeRefresher = new Runnable() {

		@Override
		public void run() {
			Calendar calendar = Calendar.getInstance(TimeZone
					.getTimeZone(GMT+8));
			final Date d = new Date();
			calendar.setTime(d);

			timeView.setText(String.format(DATE_FORMAT,
					calendar.get(Calendar.HOUR), calendar.get(Calendar.MINUTE),
					calendar.get(Calendar.SECOND)));
			mHandler.postDelayed(this, REFRESH_DELAY);
		}
	};

	@SuppressLint(NewApi)
	public LEDView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(context);
	}

	public LEDView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public LEDView(Context context) {
		super(context);
		init(context);
	}

	private void init(Context context) {
		LayoutInflater layoutInflater = LayoutInflater.from(context);

		View view = layoutInflater.inflate(R.layout.ledview, this);
		timeView = (TextView) view.findViewById(R.id.ledview_clock_time);
		bgView = (TextView) view.findViewById(R.id.ledview_clock_bg);
		AssetManager assets = context.getAssets();
		final Typeface font = Typeface.createFromAsset(assets, FONT_DIGITAL_7);
		timeView.setTypeface(font);// 设置字体
		bgView.setTypeface(font);// 设置字体

	}

	public void start() {
		mHandler.post(mTimeRefresher);
	}

	public void stop() {
		mHandler.removeCallbacks(mTimeRefresher);
	}
}

ledview.xml文件

 

 


        
        
     

 

 

控件使用Demo

 

package ione.zy.demo;

import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class LEDActivity extends Activity {

	private LEDView ledView;

	@SuppressLint(NewApi)
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_led);
		ledView = (LEDView) findViewById(R.id.ledview);
		
		  ActionBar actionBar = getActionBar();  
		  actionBar.setDisplayHomeAsUpEnabled(true); 
	}

	@Override
	protected void onResume() {
		super.onResume();
		ledView.start();
	}

	@Override
	protected void onStop() {
		super.onStop();
		ledView.stop();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_led, menu);
		return true;
	}

}


activity_led.xml

 

 

 

http://www.bkjia.com/Androidjc/867753.htmlwww.bkjia.comtruehttp://www.bkjia.com/Androidjc/867753.htmlTechArticleAndroid自定义View之组合控件 ---- LED数字时钟 先上图 LEDView效果如图所示。 之前看到一篇博客使用两个TextView实现了该效果,于是我想用自定...

本文源自: AG平台官网

上一篇:cocos2d-x 3.0游戏实例学习笔记 《跑酷》第六步--物理碰撞检测(2)--主角吃金币,cocos2d-x《跑酷

下一篇:没有了