您的位置:首页 > 其它

TextSwitcher笔记

2016-03-08 13:35 302 查看
ViewSwitcher继承自ViewSwitcher,包含子类型TextView。TextSwitcher被用来使屏幕上的label产生动画效果。每当setText(CharSequence)被调用时,TextSwitcher使用动画方式将当前的文字内容消失并显示新的文字内容。

从PreferenceScreen里启动Activity

<PreferenceScreen
android:summary="通過intent啓動Activity"
android:title="intent偏好">

<intent
android:action="android.intent.action.MAIN"
android:targetPackage="com.example.zxz.asdemo"
android:targetClass="com.example.zxz.asdemo.ui.TextSwitcherActivity"/>
</PreferenceScreen>


<activity android:name=".ui.TextSwitcherActivity">
<action android:name="android.intent.action.MAIN" />
</activity>


布局layout_text_switcher.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextSwitcher
android:id="@+id/text_switcher"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/change_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>


动画res/anim/新建动画资源in和out

anim_out_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>


anim_in_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>


Activity.java
public class TextSwitcherActivity extends Activity implements View.OnClickListener{
TextSwitcher mSwitcher;
int index = 0;
String[] mArray = {"We", "are", "good", "at", "learning","abcdefghijklmnopqrstuvwxyzadcefghij"};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_text_switcher);
findViewById(R.id.change_btn).setOnClickListener(this);
mSwitcher = (TextSwitcher) findViewById(R.id.text_switcher);
Animation out = AnimationUtils.loadAnimation(this, R.anim.anim_out_left);
Animation in = AnimationUtils.loadAnimation(this, R.anim.anim_in_right);
mSwitcher.setFactory(new ViewSwitcher.ViewFactory() {
@Override
public View makeView() {
TextView view = new TextView(TextSwitcherActivity.this);
view.setSingleLine();
view.setEllipsize(TextUtils.TruncateAt.valueOf("END"));
view.setGravity(Gravity.CENTER);
view.setTextSize(36);
view.setTextColor(Color.BLUE);
return view;
}
});
mSwitcher.setInAnimation(in);
mSwitcher.setOutAnimation(out);
mSwitcher.setText(mArray[index]);
}

@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.change_btn:
next();
break;
default:
break;
}
}

private void next() {
mSwitcher.setText(mArray[++index % mArray.length]);
}
}


在xml中

android:ellipsize = "end"   省略号在结尾

android:ellipsize = "start"   省略号在开头

android:ellipsize = "middle" 省略号在中间

android:ellipsize = "marquee" 跑马灯

最好加一个约束android:singleline = "true" 或者 android:maxLines="1"

当然也可以用代码语句

tv.setEllipsize(TextUtils.TruncateAt.valueOf("END"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("START"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));

tv.setEllipsize(TextUtils.TruncateAt.valueOf("MARQUEE"));

最好再加一个约束tv.setSingleLine(true);

注:EditText中不支持marquee模式!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: