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实现自动滚动的更多相关文章

  1. android TextView 垂直自动滚动字幕实现

    参考网上一些做法然后进行了修改, 首先继承TextView /** * VerticalScrollTextView.java * 版权所有(C) 2013 * 创建者:cuiran 2013-12- ...

  2. Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?

    1.在布局文件中放置一个TextView,给它添加scrollbars和fadeScrollbars两个属性. 如下设置:滚动条为垂直滚动条,并且一直可见(当TextView中的文字行数超过页面能显示 ...

  3. Android:TextView 自动滚动(跑马灯) (转)

    Android:TextView 自动滚动(跑马灯)       TextView实现文字滚动需要以下几个要点: 1.文字长度长于可显示范围:android:singleLine="true ...

  4. Android TextView文字横向自动滚动(跑马灯)

    TextView实现文字滚动需要以下几个要点:   1.文字长度长于可显示范围:android:singleLine="true"   2.设置可滚到,或显示样式:android: ...

  5. 自动滚动的TextView

    自动滚动的TextView 效果图 XML文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andr ...

  6. 自定义Behavior 实现Listbox自动滚动到选中项

    原文:自定义Behavior 实现Listbox自动滚动到选中项 blend为我们提供方便的behavior来扩展我们的控件,写好之后就可以在blend中方便的使用了. 下面是自定义的behavior ...

  7. Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果

    一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...

  8. Android 文字自动滚动(跑马灯)效果的两种实现方法[特别好使]

    有时候在xml中写的跑马灯效果不滚动:原因有以下 Android系统中TextView实现跑马灯效果,必须具备以下几个条件: 1.android:ellipsize=”marquee” 2.TextV ...

  9. Android文字跑马灯控件(文本自动滚动控件)

    最近在开发一个应用,需要用到文本的跑马灯效果,图省事,在网上找,但老半天都找不到,后来自己写了一个,很简单,代码如下: import android.content.Context; import a ...

随机推荐

  1. (83)Wangdao.com第十七天_JavaScript 定时器

    JavaScript 提供定时执行代码的功能,叫做 定时器(timer). 主要由 setTimeout() 和 setInterval() 这两个函数来完成.它们向任务队列添加定时任务 setTim ...

  2. Hadoop-2.9.2单机版安装(伪分布式模式)(一)

    一.环境 硬件:虚拟机VMware.win7 操作系统:Centos-7 64位 主机名: hadoopServerOne 安装用户:root软件:jdk1.8.0_181.Hadoop-2.9.2 ...

  3. css样式兼容各个浏览器时的部分总结

    [本文基本是在网络转发过来的,网站就忘记了,这文本都是保存在自己电脑本地的,还有些自己添加了些内容,这内容还会有不断的完善和更行的] 什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 ...

  4. XP下ubuntu双系统安装方法

    利用u盘将iso刻录 从u盘启动 连续按alt+f2 进入ubuntu试用 打开终端 输入 sudo umount -l /cdrom sudo umount -l /isodevice 然后安装un ...

  5. 大规模微服务架构下的Service Mesh探索之路

    小结: 1. 第一.二代Service Mesh meetup-slides/敖小剑-蚂蚁金服-大规模微服务架构下的Service Mesh探索之路.pdf https://github.com/se ...

  6. dlib编译成静态库及被其它程序调用

    一.git下载:https://github.com/davisking/dlib 官网:http://dlib.net/ 二.vs中编译成静态库 1.在vs2015中创建静态库工程(vs2015以上 ...

  7. table-一列细分为多列(合并单元格)

    这个是一个很常见的一个表格展示需求,其中最要的就两个属性 rowspan 和 colspan .他们分别就是合并行 与 合并列. 要做的效果是如图下面这个,联系电话就是合并了单元格.这个说法类似于ex ...

  8. 配置环境变量及jdk

    1.配置虚拟机nat默认为yes:cd  /etc/sysconfig/network-scripts/    ll(查看下面ifcfg文件名称)    vim ifcfg-eno16777736(按 ...

  9. reactive stream: 响应式编程

    既然 Reactive Stream 和 Java 8 引入的 Stream 都叫做流,它们之间有什么关系呢?有一点关系,Java 8 的 Stream 主要关注在流的过滤,映射,合并,而  Reac ...

  10. ehcarts 四川地图

    vue 首先你要傻子地图就引入进来(没得的地图需要你json请求得到(这个json自己去找),然后你要注册这个地图,echarts有的话就不用注册) import "../../node_m ...