横向滚动TextView
TextView的横向滚动,本身自带的跑马灯效果+自定义一个简单的TextView即可实现.
自定义view代码如下:
public class HorizontalTextview extends TextView {
public HorizontalTextview(Context context) {
super(context);
}
public HorizontalTextview(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public HorizontalTextview(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean isFocused() {//返回 true 始终有焦点
return true;
// return super.isFocused();
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if (focused) {//当有焦点的时候 开启动画 没有的时候 什么都不做保持状态
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
}
然后在布局文件引入自定义的textview,添加这几个属性
android:focusable=”true”
android:focusableInTouchMode=”true”
android:ellipsize=”marquee”
android:marqueeRepeatLimit=”marquee_forever”
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.mytest.MainActivity">
<com.mytest.view.HorizontalTextview
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_gravity="center_horizontal"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:id="@+id/tv1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="春眠不觉晓,处处蚊子咬" />
</LinearLayout>
纵向滚动TextView
纵向滚动其实实现起来也没啥难度,ViewFlipper就可以很好的解决这个问题
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.mytest.MainActivity">
<com.mytest.view.HorizontalTextview
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_gravity="center_horizontal"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:id="@+id/tv1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="春眠不觉晓,处处蚊子咬" />
<ViewFlipper
android:layout_gravity="center_horizontal"
android:id="@+id/myVf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoStart="true"
android:flipInterval="2000"
android:inAnimation="@anim/in_bottomtop"
android:outAnimation="@anim/out_bottomtop"/>
</LinearLayout>
然后在MainActivity里面的代码:
public class MainActivity extends AppCompatActivity {
private ArrayList<String> titleList;
private ViewFlipper myVf;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
main_notice = (FrameLayout) findViewById(R.id.fl_notice);
myVf = (ViewFlipper) findViewById(R.id.myVf);
titleList = new ArrayList();
titleList.add("白日依山尽");
titleList.add("黄河入海流");
titleList.add("欲穷千里目");
titleList.add("更上一层楼");
// initRollNotice();
for (int i = 0; i < titleList.size(); i++) {
TextView textView = new TextView(this);
// View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.view_notice_item, null);
// TextView textView = (TextView) view.findViewById(R.id.notice_tv);
// textView.setText(titleList.get(i));
textView.setText(titleList.get(i));
myVf.addView(textView);
}
}
}
横向和纵向的滚动都比较好实现,这里主要是记录下ViewFlipper
常用的方法;
setInAnimation 设置View进入屏幕时候使用的动画
setOutAnimation 设置View退出屏幕时候使用的动画
showPrevious 显示ViewFlipper里面的上一个View
showNext 显示ViewFlipper里面的下一个View
setFlipInterval 设置View之间切换的时间间隔
startFlipping 使用setFlipInterval方法设置的时间间隔来开始切换所有的View,切换会循环进行
stopFlipping 停止View切换
isFlipping 用来判断View切换是否正在进行
setDisplayedChild 切换到指定子View
常用的属性:
android:autoStart: 设置自动加载下一个View
android:flipInterval:设置View之间切换的时间间隔
android:inAnimation: 设置切换View的进入动画
android:outAnimation:设置切换View的退出动画