**闲来无事,自己做了很多小的Demo,现在分享一个小的跑马灯项目实例,有机会把2048小游戏的Demo也发了。不过那个的算法稍微有点儿复杂,需要整理。
-
首先在创建一个MarqueeTextViewDemo项目
- 在res-layout-activity_main.xml中编写出相应的布局EditText,Button还有TextView
- 第一步要实现一个静态的跑马灯样式,然后通过后台方法的调用,来实现动态跑马灯效果。
- 很多朋友在编写跑马灯时,会出现第一行文字内容正常,其他不会出现跑马灯效果,我这里的解决办法需要在Android:id上做文章,在MarqueeText.java中调用TextView。
- activity_main.xml代码如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#93ff93"
tools:context="com.example.dujiang.marqueetextviewdemo.MainActivity">
<com.example.dujiang.marqueetextviewdemo.MarqueeText
android:id="@+id/tv_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:textSize="100dp"
android:textColor="#CE0000"
android:layout_marginTop="10dp"
android:text="加微信:dujiang0311"
/>
<EditText
android:id="@+id/et_text"
android:hint="输入跑马灯文字"
android:layout_marginTop="400dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/b_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击生成跑马灯"
android:layout_marginTop="450dp"
android:onClick="scan"/>
<com.example.dujiang.marqueetextviewdemo.MarqueeText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="75dp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="自己动手丰衣足食,谢谢大家哈哈哈哈哈哈哈哈"
android:layout_below="@id/tv_result"
android:layout_alignParentStart="true" />
<com.example.dujiang.marqueetextviewdemo.MarqueeText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25dp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="自己动手丰衣足食,谢谢大家哈哈哈哈哈哈哈哈"
android:layout_marginBottom="93dp"
android:layout_alignBottom="@id/et_text"
android:layout_alignParentStart="true" />
</RelativeLayout>
- 废话不多说,第二步你需要让不止一行的文字显示出跑马灯的效果,所以,你需创建一个类在:java-com...marqueetextviewdemo中。我取的类名称是MarqueeText.java代码如下
package com.example.dujiang.marqueetextviewdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* Created by Dujiang on 2016/10/27.
*/
public class MarqueeText extends TextView {
public MarqueeText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean isFocused(){
//判断TextView是不是在一个被选中的状态上。
return true ;//返回的是true,确定其在被选中的状态上
}//刚才第一个可以滚动而第二个不可以滚动,是因为第一个Textview已经把focus(焦点)拿到了,
//并没有被第二个得到(因为拿不到)
//而我们自定义的值是让所有的Focused都能得到(焦点),因此两个都可以滚动
public MarqueeText(Context context) {
super(context);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MarqueeText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
- 你一定要清楚自己想要实现的效果,不是仅仅实现你后台输入的固定文字,这样的不足以称之为程序,只能称为垃圾代码,我们要能实现在前端编写相应的文字,让显示出来的文字呈现出跑马灯效果。
- MainActivity 是在程序中自动生成的,在这个类中,你需要将你EditText中编辑的文字,通过Button事件,在TextView中生成出来。MainActivity.java中的代码如下:
package com.example.dujiang.marqueetextviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText editText;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.b_btn).setOnClickListener(this);
editText = (EditText) findViewById(R.id.et_text);
textView = (TextView) findViewById(R.id.tv_result);
}
public void onClick(View v) {
textView.setText(editText.getText()); // !
}
}
- 以上就实现了代码的动态显示的过程,其实并不太难,里面涉及到的强制类型转换的问题,这个就需要读者自己体悟了。以下是个人经验:关于编程我们最重要的是要养成自己的编程习惯,其次,我们写出来的代码首先让自己看着舒服,其次是让别人看着舒服,最最忌讳的是让电脑看着舒服,你控制着你的代码, 并不是你的代码控你。致我们这些一直走在路上的程序猿!!!!
**