安卓自定义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 ...
随机推荐
- 自定义 绑定响应函数 解除响应函数 .addEventListener 兼容 .attachEvent
嗯哼.不多说,直接上代码. // 自定义 绑定响应函数 兼容性封装 Test Already. function bindEventFunc(obj, eventStr, func){ // cons ...
- laravel之路由和控制器与视图
路由和控制器: : 路由与视图: 访问:
- 【ASP.NET】Validation 服务器控件
Validation 服务器控件 Validation 服务器控件用于验证输入控件的数据.如果数据未通过验证,则向用户显示错误消息. 创建 Validation 服务器控件的语法是: <asp: ...
- jquery运用FormData结合Ajax异步上传表单,超实用
首先创建一个formData,其中参数,就是你的form表单,jquery要加0,也可以用document.querySelector("form")得到 var formData ...
- Tomcat报错invalid LOC header
原因: 可能是jar包有问题. 解决方法: 1.找到加载不了的类对应的jar包. 2.在tomcat中webapps/INF/lib中找到对应的jar包,然后删除. 3.重新下载其它版本的jar包. ...
- python 可视化界面
在各类按钮组件里,默认的消息是 “Shall I continue?”,所以你可以不带任何参数地去调用它们. 这里我们演示不带任何参数地去调用 ccbox(),当选择 “cancel” 或关闭窗口的时 ...
- mysql千万级数据量查询出所有重复的记录
查询重复的字段需要创建索引,多个条件则创建组合索引,各个条件的索引都存在则不必须创建组合索引 有些情况直接使用GROUP BY HAVING则能直接解决:但是有些情况下查询缓慢,则需要使用下面其他的方 ...
- Express全系列教程之(八):session的基本使用
一.关于session session是另一种记录客户状态的机制,与cookie保存在客户端浏览器不同,session保存在服务器当中:当客户端访问服务器时,服务器会生成一个session对象,对象中 ...
- 栈->栈与递归
文字简述 1.阶乘函数 2.2阶Fiibonacci数列 3.n阶Hanoi塔问题 代码实现 // // Created by lady on 19-4-3. // #include <stdi ...
- session and cookie
cookie cookie是由W3C组织提出,最早由Netscape社区发展的一种机制.目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox.Opera等都支持Coo ...