当前位置: 编程技术>移动开发
本页文章导读:
▪二种不同形式的跑马灯的实现 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()方法就可以了,简单!
使用时同TextView一样:
第2种:还是继承TextView,重写onDraw(),在onDraw中不停的重绘。
使用:
这2种跑马灯稍微有点区别,需要掂量着使用。
第1种跑马灯不能设置速度,并且要超过一行才会滚动。
第2种跑马灯只能设置单一颜色,且需要在代码中设置,不能同时设置多种颜色。速度设的不要过大(<= 2.0f),否则停顿现象比较明显。
想知道同时设置多种颜色?
http://gundumw100.iteye.com/admin/blogs/904107
普通的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 开发入门指南日记本)
今天见到两个方法: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);
最新技术文章: