自定义控件,实现手指触摸的文字被选中。
2014-05-07 10:35
197 查看
public class CustomView extends EditText {
private int off; // 字符串的偏移值
private Context context;
private MainActivity mainActivity;
public CustomView(Context context) {
super(context);
this.context = context;
initialize();
}
private void initialize() {
setGravity(Gravity.TOP);
setBackgroundColor(Color.WHITE);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initialize();
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
// 不做任何处理,为了阻止长按的时候弹出上下文菜单
}
@Override
public boolean getDefaultEditable() {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
Layout layout = getLayout();
int line = 0;
switch (action) {
case MotionEvent.ACTION_DOWN:
// 得到在这篇文章的第几行
line = layout.getLineForVertical(getScrollY() + (int) event.getY());//
// 得到这一行在水平方向的偏移量
off = layout.getOffsetForHorizontal(line, (int) event.getX());
// 设置光标的位置
Selection.setSelection(getEditableText(), off);
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
int x = (int) event.getX();
int y = (int) event.getY();
line = layout.getLineForVertical(getScrollY() + (int) event.getY());
int curOff = layout
.getOffsetForHorizontal(line, (int) event.getX());
// 选择部分文字
Selection.setSelection(getEditableText(), off, curOff);
mainActivity = (MainActivity) context;
break;
}
return true;
}
private int off; // 字符串的偏移值
private Context context;
private MainActivity mainActivity;
public CustomView(Context context) {
super(context);
this.context = context;
initialize();
}
private void initialize() {
setGravity(Gravity.TOP);
setBackgroundColor(Color.WHITE);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initialize();
}
@Override
protected void onCreateContextMenu(ContextMenu menu) {
// 不做任何处理,为了阻止长按的时候弹出上下文菜单
}
@Override
public boolean getDefaultEditable() {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
Layout layout = getLayout();
int line = 0;
switch (action) {
case MotionEvent.ACTION_DOWN:
// 得到在这篇文章的第几行
line = layout.getLineForVertical(getScrollY() + (int) event.getY());//
// 得到这一行在水平方向的偏移量
off = layout.getOffsetForHorizontal(line, (int) event.getX());
// 设置光标的位置
Selection.setSelection(getEditableText(), off);
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
int x = (int) event.getX();
int y = (int) event.getY();
line = layout.getLineForVertical(getScrollY() + (int) event.getY());
int curOff = layout
.getOffsetForHorizontal(line, (int) event.getX());
// 选择部分文字
Selection.setSelection(getEditableText(), off, curOff);
mainActivity = (MainActivity) context;
break;
}
return true;
}
相关文章推荐
- Android自定义控件之自定义TextView,实现drawableLeft可以和文字一起居中
- 手指之舞(三):多点触摸实现并且模拟GestureListener操作
- H5 Pinchzoom.js 插件实现手指触摸图片放大缩小
- Android实现:手指触摸滑动切换Activity
- 在unity中实现方向盘UI的随着触摸转动和手指离开复位功能
- Android自定义控件系列(二)—icon+文字的多种效果实现
- JS实现根据当前文字选择返回被选中的文字
- 微信小程序实现手指触摸画板
- Android自定义控件实现多行文字自动向上滚动轮播效果(伪文字轮播)
- Android 自定义控件实现显示文字的功能
- 手指触摸旋转游戏物体和放大物体的代码实现
- 在unity中实现方向盘UI的随着触摸转动和手指离开复位功能
- Android自定义控件实现icon+文字的多种效果
- Android自定义控件系列(二)—icon+文字的多种效果实现
- Android自定义控件系列(二)—icon+文字的多种效果实现
- Android自定义控件TextView---之实现drawableLeft图片和文字一起居中
- JS实现根据当前文字选择返回被选中的文字
- Android自定义控件实现随手指移动的小球
- Android 触摸实现物体运动
- 55-003-1 HTML5实现文字标题列表显示--鼠标经过时文字动态阴影展示