这一篇 是上一篇的升级版 ,可以实现多行跑马灯效果,
主要解决了在焦点抢占导致的事件冲突问题
MainActivity
package com.android.marquee;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void alertDialog(View view){
AlertDialog.Builder alertDialog=new AlertDialog.Builder(this);
alertDialog.setTitle("弹框一");
alertDialog.setMessage("弹框二");
alertDialog.show();
}
}
自定义控件MarqueeView,解决焦点抢占导致的事件冲突问题
package com.android.marquee;
import android.content.Context;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
/**
* date:2018/11/12
* author:李壮(HUAWEI)
* function:自定义控件
*/
public class MarqueeView extends android.support.v7.widget.AppCompatTextView {
public MarqueeView(Context context) {
this(context,null);
}
public MarqueeView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public MarqueeView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//设置单行
setSingleLine();
//设置Ellipsize
setEllipsize(TextUtils.TruncateAt.MARQUEE);
//获取焦点
setFocusable(true);
//走马灯的重复次数,-1代表无限重复
setMarqueeRepeatLimit(-1);
//强制获得焦点
setFocusableInTouchMode(true);
}
/*
*这个属性这个View得到焦点,在这里我们设置为true,这个View就永远是有焦点的
*/
@Override
public boolean isFocused() {
return true;
}
/*
* 用于EditText抢注焦点的问题
* */
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if (focused) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
/*
* Window与Window间焦点发生改变时的回调
* */
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if (hasWindowFocus)
super.onWindowFocusChanged(hasWindowFocus);
}
}
布局文件
<?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=".MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="alertDialog"
android:text="点我弹出对话框"/>
<com.android.marquee.MarqueeView
android:id="@+id/mvOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#ff00"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="一切事无法追求完美,唯有追求尽力而为。这样心无压力,出来的结果反而会更好。生命不是要超越别人,而是要超越自己。" />
<com.android.marquee.MarqueeView
android:id="@+id/mvTwo"
android:layout_marginTop="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="#ff0"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="美丽的花虽然会凋谢,可是盛开的时刻值得欣赏。要在美好的时候创造出美好的东西,人生才会充满意义" />
<EditText
android:hint="请输入文本"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
这下我们就可以实现多行跑马灯效果的实现