**闲来无事,自己做了很多小的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"?>

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">

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"

/>

android:id="@+id/et_text"

android:hint="输入跑马灯文字"

android:layout_marginTop="400dp"

android:layout_width="match_parent"

android:layout_height="wrap_content"

/>

android:id="@+id/b_btn"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="点击生成跑马灯"

android:layout_marginTop="450dp"

android:onClick="scan"/>

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" />

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" />

废话不多说,第二步你需要让不止一行的文字显示出跑马灯的效果,所以,你需创建一个类在: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()); // !

}

}

以上就实现了代码的动态显示的过程,其实并不太难,里面涉及到的强制类型转换的问题,这个就需要读者自己体悟了。以下是个人经验:关于编程我们最重要的是要养成自己的编程习惯,其次,我们写出来的代码首先让自己看着舒服,其次是让别人看着舒服,最最忌讳的是让电脑看着舒服,你控制着你的代码, 并不是你的代码控你。致我们这些一直走在路上的程序猿!!!!

**

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐