苦苦搜寻也没有找到Android的EditText与SeekBar联动例子,吐血分享哈!
2015-10-12 19:17
363 查看
苦苦搜寻也没有找到Android的EditText与SeekBar联动例子,吐血分享哈!
private boolean notHandleAfterTextChangedEvent = false;
private boolean changeFromSeekBar = false;
private boolean changeFromEditText = false;
这几个变量是关键,防止陷入死循环。
代码如下:
private EditText
etImageAdjustment = null;
private SeekBar
skbImageAdjustment = null;
private
boolean notHandleAfterTextChangedEvent =
false;
private
boolean changeFromSeekBar =
false;
private
boolean changeFromEditText =
false;
@Override
protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_image);
……
……
etImageAdjustment = (EditText) findViewById(R.id.pick_image_etImageAdjustment);
etImageAdjustment.addTextChangedListener(new TextWatcher() {
@Override
public
void onTextChanged(CharSequence s,
int
start, int
before,
int
count) {
// TODO自动生成的方法存根
}
@Override
public
void beforeTextChanged(CharSequence s,
int
start, int
count,
int
after) {
// TODO自动生成的方法存根
}
@Override
public
void afterTextChanged(Editable s) {
// TODO自动生成的方法存根
if (notHandleAfterTextChangedEvent) {
notHandleAfterTextChangedEvent =
false;
// 光标置最后
CharSequence text =
etImageAdjustment.getText();
if (text
instanceof Spannable) {
Spannable spanText = (Spannable)
text;
Selection.setSelection(spanText,
text.length());
}
return;
}
if (s ==
null) {
return;
}
Integer value = 0;
if (s.toString().trim().equals("")) {
notHandleAfterTextChangedEvent =
true;
etImageAdjustment.setText("");
} else {
value = Integer.parseInt(s.toString());
}
if (value !=
null) {
// 上下限
if (value < 0) {
value = 0;
} else
if (value > 99) {
value = 99;
}
notHandleAfterTextChangedEvent =
true;
etImageAdjustment.setText(Integer.toString(value));
try {
if (!changeFromSeekBar) {
changeFromEditText =
true;
skbImageAdjustment.setProgress(value);
} else {
changeFromSeekBar =
false;
}
} catch (NumberFormatException
e) {
Toast.makeText(getApplicationContext(),
"writeyour number", Toast.LENGTH_LONG).show();
}
}
}
});
skbImageAdjustment = (SeekBar) findViewById(R.id.pick_image_skbImageAdjustment);
skbImageAdjustment
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public
void onStopTrackingTouch(SeekBar
seekBar) {
// TODO自动生成的方法存根
}
@Override
public
void onStartTrackingTouch(SeekBar
seekBar) {
// TODO自动生成的方法存根
}
@Override
public
void onProgressChanged(SeekBar
seekBar,
int
progress, boolean
fromUser) {
// TODO自动生成的方法存根
if (fromUser) {
if (!changeFromEditText) {
changeFromSeekBar =
true;
etImageAdjustment.setText(Integer
.toString(progress));
} else {
changeFromEditText =
false;
}
……
}
}
});
}
private boolean notHandleAfterTextChangedEvent = false;
private boolean changeFromSeekBar = false;
private boolean changeFromEditText = false;
这几个变量是关键,防止陷入死循环。
代码如下:
private EditText
etImageAdjustment = null;
private SeekBar
skbImageAdjustment = null;
private
boolean notHandleAfterTextChangedEvent =
false;
private
boolean changeFromSeekBar =
false;
private
boolean changeFromEditText =
false;
@Override
protected
void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pick_image);
……
……
etImageAdjustment = (EditText) findViewById(R.id.pick_image_etImageAdjustment);
etImageAdjustment.addTextChangedListener(new TextWatcher() {
@Override
public
void onTextChanged(CharSequence s,
int
start, int
before,
int
count) {
// TODO自动生成的方法存根
}
@Override
public
void beforeTextChanged(CharSequence s,
int
start, int
count,
int
after) {
// TODO自动生成的方法存根
}
@Override
public
void afterTextChanged(Editable s) {
// TODO自动生成的方法存根
if (notHandleAfterTextChangedEvent) {
notHandleAfterTextChangedEvent =
false;
// 光标置最后
CharSequence text =
etImageAdjustment.getText();
if (text
instanceof Spannable) {
Spannable spanText = (Spannable)
text;
Selection.setSelection(spanText,
text.length());
}
return;
}
if (s ==
null) {
return;
}
Integer value = 0;
if (s.toString().trim().equals("")) {
notHandleAfterTextChangedEvent =
true;
etImageAdjustment.setText("");
} else {
value = Integer.parseInt(s.toString());
}
if (value !=
null) {
// 上下限
if (value < 0) {
value = 0;
} else
if (value > 99) {
value = 99;
}
notHandleAfterTextChangedEvent =
true;
etImageAdjustment.setText(Integer.toString(value));
try {
if (!changeFromSeekBar) {
changeFromEditText =
true;
skbImageAdjustment.setProgress(value);
} else {
changeFromSeekBar =
false;
}
} catch (NumberFormatException
e) {
Toast.makeText(getApplicationContext(),
"writeyour number", Toast.LENGTH_LONG).show();
}
}
}
});
skbImageAdjustment = (SeekBar) findViewById(R.id.pick_image_skbImageAdjustment);
skbImageAdjustment
.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public
void onStopTrackingTouch(SeekBar
seekBar) {
// TODO自动生成的方法存根
}
@Override
public
void onStartTrackingTouch(SeekBar
seekBar) {
// TODO自动生成的方法存根
}
@Override
public
void onProgressChanged(SeekBar
seekBar,
int
progress, boolean
fromUser) {
// TODO自动生成的方法存根
if (fromUser) {
if (!changeFromEditText) {
changeFromSeekBar =
true;
etImageAdjustment.setText(Integer
.toString(progress));
} else {
changeFromEditText =
false;
}
……
}
}
});
}
相关文章推荐
- android:Kotlin Java Kotlin android Kotlin
- android:RxJava RxAndroid+Lambda
- Android持续集成--JENKINS+GRADLE+JACOCO+SONARQUBE(一)
- Android 运行时资源替换----Runtime Resource Overlay
- android 中字节流和字符流的区别
- Android系统特有的驱动
- Android 自定义View修炼-自定义弹幕效果View
- android制,点击EditText时刻,隐藏系统软键盘,显示光标
- Android中使用Gson解析数据
- android:在android studio中使用lambda,android lambda,retrolambda
- ListView中convertView和ViewHolder的工作原理
- Android首次进入应用时加载引导界面
- Android Camera HAL3中预览preview模式下的数据流
- 关于Android工程中的主要文件夹存放的文件种类
- android客户端学习-ecplise环境变量
- Android greenDao 数据库的使用(三)
- android 使用drawable将显示状态和数据分离
- Android greenDao 数据库的使用(二)
- android应用消息处理机制
- android开机启动Service(小发现)