当前位置:  编程技术>移动开发
本页文章导读:
    ▪二种不同形式的跑马灯的实现        2种不同形式的跑马灯的实现 普通的TextView可以实现跑马灯,但是只有当焦点在它上面时才有效。如何做一个自动的跑马灯呢?第一种:继承TextView,然后重写isFocused()方法就可以了,简单.........
    ▪ startActivityForResult intent 跳转相干的        startActivityForResult intent 跳转相关的 今天见到两个方法:startActivityForResult(Intent,int)和onActivityResult(int requestCode, int resultCode, Intent data)方法。算是积累的一点小知识吧。方法一:表示启动一个.........
    ▪ 地址簿(Address Book)运用例子       地址簿(Address Book)使用例子 ABAddressBookRef addressBook = ABAddressBookCreate(); CFArrayRef peopleWithName = ABAddressBookCopyPeopleWithName (addressBook, (CFStringRef)@"name"); if((int)CFArrayGetCount(peopleWithName)){ CFIndex theIndex=.........

[1]二种不同形式的跑马灯的实现
    来源: 互联网  发布时间: 2014-02-18
2种不同形式的跑马灯的实现
普通的TextView可以实现跑马灯,但是只有当焦点在它上面时才有效。
如何做一个自动的跑马灯呢?
第一种:继承TextView,然后重写isFocused()方法就可以了,简单!
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
/**
 * 单行文本跑马灯控件
 * @author admin
 *
 */
public class ScrollForeverTextView extends TextView {

	public ScrollForeverTextView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

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

	public ScrollForeverTextView(Context context, AttributeSet attrs,
			int defStyle) {
		super(context, attrs, defStyle);
	}

	@Override
	public boolean isFocused() {
		return true;
	}

}

使用时同TextView一样:
<com.ql.view.ScrollForeverTextView
  		android:layout_width="fill_parent" 
		android:layout_height="wrap_content" 
		android:textSize="30px"
		android:singleLine="true"
		android:ellipsize="marquee"
		android:marqueeRepeatLimit="marquee_forever"
		android:textColor="@color/red" 
		android:text="1234567890wwwwwwwwwwwwwwwwwwwwww1234567890"
		android:focusable="true"
	/>


第2种:还是继承TextView,重写onDraw(),在onDraw中不停的重绘。
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.TextView;

/**
 * 单行文本跑马灯控件
 * @author admin
 *
 */
public class AutoScrollTextView extends TextView implements OnClickListener {
	public final static String TAG = AutoScrollTextView.class.getSimpleName();

	private float textLength = 0f;// 文本长度
	private float viewWidth = 0f;
	private float step = 0f;// 文字的横坐标
	private float y = 0f;// 文字的纵坐标
	private float temp_view_plus_text_length = 0.0f;// 用于计算的临时变量
	private float temp_view_plus_two_text_length = 0.0f;// 用于计算的临时变量
	public boolean isStarting = false;// 是否开始滚动
	private Paint paint = null;// 绘图样式
	private CharSequence text = "";// 文本内容
	private float speed = 0.5f;
	private int textColor=0xFF000000;
	
	public int getTextColor() {
		return textColor;
	}

	public void setTextColor(int color) {
		this.textColor = color;
	}

	public float getSpeed() {
		return speed;
	}

	public void setSpeed(float speed) {
		this.speed = speed;
	}

	public AutoScrollTextView(Context context) {
		super(context);
		initView();
	}

	public AutoScrollTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView();
	}

	public AutoScrollTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initView();
	}

	/** */
	/**
	 * 初始化控件
	 */
	private void initView() {
		setOnClickListener(this);
	}

	/** */
	/**
	 * 文本初始化,每次更改文本内容或者文本效果等之后都需要重新初始化一下!
	 */
	public void init(float width/*WindowManager windowManager*/) {
		text=super.getText();
		paint = super.getPaint();
//		Paint paint=new Paint();
		text = getText().toString();
		textLength = paint.measureText(text.toString());
//		viewWidth = getWidth();
//		if (viewWidth == 0) {
//			if (windowManager != null) {
//				Display display = windowManager.getDefaultDisplay();
//				viewWidth = display.getWidth();
//			}
//		}
		viewWidth=width;
		step = textLength;
		temp_view_plus_text_length = viewWidth + textLength;
		temp_view_plus_two_text_length = viewWidth + textLength * 2;
		y = getTextSize() + getPaddingTop();
		paint.setColor(textColor);
	}

	@Override
	public Parcelable onSaveInstanceState() {
		Parcelable superState = super.onSaveInstanceState();
		SavedState ss = new SavedState(superState);

		ss.step = step;
		ss.isStarting = isStarting;

		return ss;

	}

	@Override
	public void onRestoreInstanceState(Parcelable state) {
		if (!(state instanceof SavedState)) {
			super.onRestoreInstanceState(state);
			return;
		}
		SavedState ss = (SavedState) state;
		super.onRestoreInstanceState(ss.getSuperState());

		step = ss.step;
		isStarting = ss.isStarting;

	}

	public static class SavedState extends BaseSavedState {
		public boolean isStarting = false;
		public float step = 0.0f;

		SavedState(Parcelable superState) {
			super(superState);
		}

		@Override
		public void writeToParcel(Parcel out, int flags) {
			super.writeToParcel(out, flags);
			out.writeBooleanArray(new boolean[] { isStarting });
			out.writeFloat(step);
		}

		public static final Parcelable.Creator<SavedState> CREATOR = new Parcelable.Creator<SavedState>() {

			public SavedState[] newArray(int size) {
				return new SavedState[size];
			}

			@Override
			public SavedState createFromParcel(Parcel in) {
				return new SavedState(in);
			}
		};

		private SavedState(Parcel in) {
			super(in);
			boolean[] b = null;
			in.readBooleanArray(b);
			if (b != null && b.length > 0)
				isStarting = b[0];
			step = in.readFloat();
		}
	}

	/** */
	/**
	 * 开始滚动
	 */
	public void startScroll() {
		isStarting = true;
		invalidate();
	}

	/** */
	/**
	 * 停止滚动
	 */
	public void stopScroll() {
		isStarting = false;
		invalidate();
	}

	@Override
	public void onDraw(Canvas canvas) {
//		super.onDraw(canvas);
		
		canvas.drawText(text,0,text.length(), temp_view_plus_text_length - step, y, paint);
		if (!isStarting) {
			return;
		}
		step += speed;
		if (step > temp_view_plus_two_text_length)
			step = textLength;
		invalidate();

	}

	@Override
	public void onClick(View v) {
		if (isStarting)
			stopScroll();
		else
			startScroll();

	}

}

使用:
marquee = (AutoScrollTextView) findViewById(R.id.marquee);
//		marquee.setText(String.format(getResources().getString(R.string.marquee0),Consts.termno,"2010-12-28"));
		marquee.setText("上证指数3000.15 6.81(0.37%)深圳成指3000.15 6.81(0.37%)");
//		marquee.setTextColor(0xffff0000);//注意:颜色必须在这里设置,xml中设置无效!默认黑色。
		//如果想改变跑马灯的文字内容或者文字效果,则在调用完setText方法之后,需要再调用一下init(width)方法,重新进行初始化和相关参数的计算。
		marquee.setSpeed(1.5f);
		marquee.init(width);//width通常就是屏幕宽!
		marquee.startScroll();

这2种跑马灯稍微有点区别,需要掂量着使用。
第1种跑马灯不能设置速度,并且要超过一行才会滚动。
第2种跑马灯只能设置单一颜色,且需要在代码中设置,不能同时设置多种颜色。速度设的不要过大(<= 2.0f),否则停顿现象比较明显。
想知道同时设置多种颜色?
http://gundumw100.iteye.com/admin/blogs/904107

    
[2] startActivityForResult intent 跳转相干的
    来源: 互联网  发布时间: 2014-02-18
startActivityForResult intent 跳转相关的
今天见到两个方法:startActivityForResult(Intent,int)和onActivityResult(int requestCode, int resultCode, Intent data)方法。
算是积累的一点小知识吧。方法一:表示启动一个activity,当这个activityfinish掉或点击“返回”键的时候,会返回到启动他的那个activity,并且在这个里面回调方法二。这个方法的两个参数,参数一表示要启动的activity,方法二表示启动这个activity的请求参数。这样可以在返回回调方法二,执行方法二里德内容时时,根据请求的参数,使activity知道,是从哪一个activity返回的,做相应的处理。方法二,在被启动的activity里可以通过setResult(int)方法设置返回时的参数(方法二的第二个参数);参数三可以获取从被启动的activity里传递来的数据。
启动另外一个activity可以有两种方式:显示的和隐式的。其中显示调用时,就是new intent对象,通过setClass()方法设置跳转。而隐式的跳转则是要调用setAction(String)方法;这样就要在要配置文件启动的那个activity添加<intent-filter><action>标签,其中category参数可以是默认的。
   一个小li子(android 开发入门指南日记本)

    
[3] 地址簿(Address Book)运用例子
    来源: 互联网  发布时间: 2014-02-18
地址簿(Address Book)使用例子
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef peopleWithName = ABAddressBookCopyPeopleWithName
(addressBook, (CFStringRef)@"name");
if((int)CFArrayGetCount(peopleWithName)){
	CFIndex theIndex= 0;
	ABRecordRef personRecord = CFArrayGetValueAtIndex(peopleWithName, theIndex);
	
       //kABPersonPhoneProperty to get phone number
       //ABMultiValueRef eMails= ABRecordCopyValue(personRecord,kABPersonEmailProperty);
	ABMultiValueRef phoneNumbers= ABRecordCopyValue(personRecord, kABPersonPhoneProperty);
       if(ABMultiValueGetCount(phoneNumbers)){
	       CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phoneNumbers, 0);						
	       if(phoneNumber!=nil){
			//TODO:to save the phone number
			//release the Phone Number						
			CFRelease(phoneNumber);
		}
	}
	CFRelease(phoneNumbers);
}
CFRelease(peopleWithName);
CFRelease(addressBook);
 

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3