安卓自定义TextView实现自动滚动
xml文件代码
<com.mobile.APITest.ScrollEditText
android:id="@+id/statusEditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_weight="1"
android:gravity="top"
android:scrollbarFadeDuration="1000"
android:scrollbarStyle="insideOverlay"
android:scrollbars="vertical"
android:singleLine="false"
android:textColor="@color/black" />
自定义TextView
package com.mobile.APITest; import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.text.method.ScrollingMovementMethod;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView; import com.mobile.pos.lib.Global.POSCharUtils; /**
* Created by Administrator on 2016/11/23.
*/
@SuppressLint("AppCompatCustomView")
public class ScrollEditText extends TextView {
private static final String TAG = "ScrollEditText";
private boolean pressFlag = false;//判断手指是否按着屏幕,如果是就不需要滚动了。 public ScrollEditText(Context context) {
super(context);
} public ScrollEditText(Context context, AttributeSet attrs) {
super(context, attrs);
} public ScrollEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
postDelayed(runnable, 2000);
}
if (event.getAction() == MotionEvent.ACTION_MOVE) {
pressFlag = true;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
pressFlag = true;
removeCallbacks(runnable);
}
POSCharUtils.showLogD(TAG, event.getAction() + "");
return super.dispatchTouchEvent(event);
} private Runnable runnable = new Runnable() {
@Override
public void run() {
pressFlag = false;
}
}; @Override
protected void onFinishInflate() {
super.onFinishInflate();
setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
showDialog();
return false;
}
});
setMovementMethod(ScrollingMovementMethod.getInstance());
} public void appendStr(final CharSequence text) {
post(new Runnable() {
@Override
public void run() {
ScrollEditText.super.append(text);
POSCharUtils.showLogD(TAG, text.toString());
if (pressFlag) return;
int scrollAmount = getLayout().getLineTop(getLineCount())
- getHeight();
if (scrollAmount > 0)
scrollTo(0, scrollAmount);
else
scrollTo(0, 0);
}
});
} public void setTextStr(final CharSequence text) {
post(new Runnable() {
@Override
public void run() {
ScrollEditText.super.setText(text);
if (pressFlag) return;
int scrollAmount = getLayout().getLineTop(getLineCount())
- getHeight(); if (scrollAmount > 0)
scrollTo(0, scrollAmount);
else
scrollTo(0, 0);
}
});
} private void scrollTop() {
scrollTo(0, 0);
} private void scrollBottom() {
int scrollAmount = getLayout().getLineTop(getLineCount())
- getHeight();
if (scrollAmount > 0)
scrollTo(0, scrollAmount);
else
scrollTo(0, 0);
}
//信息内容是简单地列表项 public void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext());
//定义复选框
builder.setItems(new String[]{"顶部", "底部"}, listener);
builder.create().show();
} private DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
scrollTop();
break;
case 1:
scrollBottom();
break;
}
}
};
}
长按ScrollEditText 可以跳转至view的底部或者顶部
安卓自定义TextView实现自动滚动的更多相关文章
- android TextView 垂直自动滚动字幕实现
参考网上一些做法然后进行了修改, 首先继承TextView /** * VerticalScrollTextView.java * 版权所有(C) 2013 * 创建者:cuiran 2013-12- ...
- Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?
1.在布局文件中放置一个TextView,给它添加scrollbars和fadeScrollbars两个属性. 如下设置:滚动条为垂直滚动条,并且一直可见(当TextView中的文字行数超过页面能显示 ...
- Android:TextView 自动滚动(跑马灯) (转)
Android:TextView 自动滚动(跑马灯) TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true ...
- Android TextView文字横向自动滚动(跑马灯)
TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true" 2.设置可滚到,或显示样式:android: ...
- 自动滚动的TextView
自动滚动的TextView 效果图 XML文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...
- 自定义Behavior 实现Listbox自动滚动到选中项
原文:自定义Behavior 实现Listbox自动滚动到选中项 blend为我们提供方便的behavior来扩展我们的控件,写好之后就可以在blend中方便的使用了. 下面是自定义的behavior ...
- Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果
一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...
- Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]
有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...
- Android文字跑马灯控件(文本自动滚动控件)
最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...
随机推荐
- Oracle 触发器 trigger
触发器: 当用户登录/退出或者操作某个数据对象或者进行DDL(建表,建view)引起某个储存过程的值的变化,把这个隐含被调用的过程,称为触发器. 语法 CREATE OR REPLACE TRIGGE ...
- PHP 可以获取客户端哪些访问信息---来自网页转载
php是一种弱类型的程序语言,但是最web的 在程序语言中有系统全局函数: $_SERVER <?php echo "".$_SERVER['PHP_SELF'];#当前正在 ...
- VS开发入门三:c#的类的修饰符和成员的修饰符
初学者经常会犯下的错误就是,修饰符一大堆,而且类和其成员很多修饰符是一样的容易混用 这里总结下 C#修饰符之类修饰符(个 助记 PIPA SS ):public.internal. partial(多 ...
- PHP函数ip2long转换IP时数值太大而产生负数
// 使用 sprintf 返回无符号十进制数 $long = sprintf("%u",ip2long($ip)); // 先转换为二进制然后在转换为十进制 $long = bi ...
- linux 的基础命令
date 查看时间 cal 查看日历 cal 2009 cal 10 2019 ls 查看目录下的内容 ls -alh tree 以树的形式查看目录内容 bc 计算器 M ...
- Python 学习笔记6 变量-字典
字典是python中一个十分重要的变量,他是一个可变的容器对象.通过一组key(键)和value(值)对组成一个元素. 组成形式为{'key':'value', 'key':'value'}.整个字典 ...
- APP偏移地址
配合BootLoader的APP程序 SCB->VTOR = 0x0803C004; 这里最后还要加上4的原因是 向量表的复位向量地址是4 0地址存的是栈顶
- Spring boot 国际化自动加载资源文件问题
Spring boot 国际化自动加载资源文件问题 最近在做基于Spring boot配置的项目.中间遇到一个国际化资源加载的问题,正常来说只要在application.properties文件中定义 ...
- Ionic3多个自定义过滤器--管道(pipe)
往往我们创建自定义管道一般都不止只会创建一个自定义管道,和自定义组件类似,创建多个方式如下. 一.命令行生成管道 ionic g pipe formateDate ionic g pipemoneyD ...
- node js 爬虫爬取静态页面,
先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...