苦苦搜寻也没有找到Android的EditText与SeekBar联动例子,吐血分享哈!

来源:互联网 发布:招募淘宝客 编辑:程序博客网 时间:2024/04/30 15:08

苦苦搜寻也没有找到Android的EditText与SeekBar联动例子,吐血分享哈!

private boolean notHandleAfterTextChangedEvent = false;
private boolean changeFromSeekBar = false;
private boolean changeFromEditText = false;

这几个变量是关键,防止陷入死循环。

代码如下:


    private EditTextetImageAdjustment = null;

    private SeekBarskbImageAdjustment = 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,

                  intcount) {

              // TODO自动生成的方法存根

 

           }

 

           @Override

           public void beforeTextChanged(CharSequence s,int start, int count,

                  intafter) {

              // TODO自动生成的方法存根

 

           }

 

           @Override

           public void afterTextChanged(Editable s) {

              // TODO自动生成的方法存根

              if (notHandleAfterTextChangedEvent) {

                  notHandleAfterTextChangedEvent =false;

 

                  // 光标置最后

                  CharSequence text =etImageAdjustment.getText();

                  if (textinstanceof 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;

                  } elseif (value > 99) {

                     value = 99;

                  }

                  notHandleAfterTextChangedEvent =true;

                  etImageAdjustment.setText(Integer.toString(value));

                  try {

                     if (!changeFromSeekBar) {

                         changeFromEditText =true;

                         skbImageAdjustment.setProgress(value);

                     } else {

                         changeFromSeekBar =false;

                     }

                  } catch (NumberFormatExceptione) {

                     Toast.makeText(getApplicationContext(),

                            "writeyour number", Toast.LENGTH_LONG).show();

                  }

              }

           }

       });

       skbImageAdjustment = (SeekBar) findViewById(R.id.pick_image_skbImageAdjustment);

       skbImageAdjustment

              .setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

 

                  @Override

                  publicvoid onStopTrackingTouch(SeekBar seekBar) {

                     // TODO自动生成的方法存根

                  }

 

                  @Override

                  publicvoid onStartTrackingTouch(SeekBar seekBar) {

                     // TODO自动生成的方法存根

                  }

 

                  @Override

                  publicvoid onProgressChanged(SeekBar seekBar,

                         intprogress, booleanfromUser) {

                     // TODO自动生成的方法存根

                     if (fromUser) {

                         if (!changeFromEditText) {

                            changeFromSeekBar =true;

                            etImageAdjustment.setText(Integer

                                   .toString(progress));

                         } else {

                            changeFromEditText =false;

                         }

                        

                         ……

                     }

                  }

 

              });

    }

1 0