垂直搜索栏浮动文本问题
Vertical Seekbar Floating text Issue
我有一个带有多个垂直搜索栏的视图。我在拇指上绘制文本,我想在进度变化时在拇指上方显示浮动文本框。
我们能够在进度变化时在拇指上方显示浮动的文本。 OnStopTracking/on 将手指从拇指上移开应该看不到浮动文本。
我已经动态添加了搜索栏。请查看随附的屏幕截图,了解我要如何实施。
看看代码:
多搜索栏的实现:
for (int i = 0; i <= undertimearray.length - 1; i++) {
LayoutInflater layoutInfralte = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View inflatedView = layoutInfralte.inflate(R.layout.element_sliderandtext, ll_rightside, false);
TextView submittedByTextView = (TextView) inflatedView.findViewById(R.id.txt_underseekbar);
submittedByTextView.setText(undertimearray[i]);
//rl_seekbarandtext=(RelativeLayout)inflatedView. findViewById(R.id.rl_seekbarandtext);
myseekbar = (TextThumbSeekBar) inflatedView.findViewById(R.id.myseekbar);
tvProgress = (TextView) inflatedView.findViewById(R.id.tv_progress);
myseekbar.setMax(50);
ll_tempvalues.post(new Runnable() {
@Override
public void run() {
height = ll_tempvalues.getHeight();
// Log.e("TAG", "TAG" + "=height=" + height);
}
});
ll_rightside.addView(inflatedView);
}
以下是我们尝试实现的在缩略图上方显示浮动文本的方法:
myseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
final RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
p.addRule(RelativeLayout.ALIGN_RIGHT, seekBar.getId());
Rect thumbRect = myseekbar.getSeekBarThumb().getBounds();
Log.v("TAG", "ThumbRect Region : " + thumbRect.centerX());
p.setMargins(0, thumbRect.centerY() *12, 0, 0);
// tvProgress.setPadding(thumbRect.centerY() * 2, 0, 0, 0);
tvProgress.setVisibility(View.VISIBLE);
tvProgress.setLayoutParams(p);
//tvProgress.setY(progress * 10);
tvProgress.setText(String.valueOf(progress));
tvProgress.invalidate();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
tvProgress.setVisibility(View.GONE);
}
});
我们面临的问题是未调用 onStopTrackingTouch,因此未隐藏进度文本。我们也没有在 onTouchEvent 侦听器中的 ACTION_CANCEL 中获得任何状态。
我借助 link 的拇指和垂直搜索栏:
[拇指 link 并添加 canvas.rotate(-90); canvas.translate(-getHeight(), 0);] 垂直搜索栏1
您似乎已经扩展了 SeekBar class 并根据您共享的图像创建了自定义 SeekBar。我曾经遇到过同样的问题。
解决这个问题的方法是,你可以拿一个 boolean
标志,并在 canvas 上绘制文本,方法是向你传递给正在绘制的文本的值添加一些额外的值拇指.
您可以通过添加以下函数来切换 boolean
值
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
boolean ret = super.dispatchTouchEvent(event);
showPopup = event.getAction() != MotionEvent.ACTION_UP;
return ret;
}
其中 showPopup
是 boolean
值。 onDraw函数如下
String progressText = String.valueOf(getProgress() + 60);
Rect bounds = new Rect();
mTextPaint.getTextBounds(progressText, 0, progressText.length(), bounds);
int leftPadding = getPaddingLeft() - getThumbOffset();
float progressRatio = (float) getProgress() / getMax();
float thumbOffset = mThumbSize * (.4f - progressRatio);
float thumbX = progressRatio * getHeight() + leftPadding + thumbOffset;
float thumbY = getWidth() / 2.05f + bounds.width() / 2.15f;
canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), thumbY + getResources().getDimension(R.dimen.s_5sp), mTextPaint);//Text on thumb
if (showPopup)//Text above thumb position
canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), (thumbY + getResources().getDimension(R.dimen.s_5sp) - 40), mTextPaint);
我有一个带有多个垂直搜索栏的视图。我在拇指上绘制文本,我想在进度变化时在拇指上方显示浮动文本框。
我们能够在进度变化时在拇指上方显示浮动的文本。 OnStopTracking/on 将手指从拇指上移开应该看不到浮动文本。
我已经动态添加了搜索栏。请查看随附的屏幕截图,了解我要如何实施。
看看代码:
多搜索栏的实现:
for (int i = 0; i <= undertimearray.length - 1; i++) {
LayoutInflater layoutInfralte = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View inflatedView = layoutInfralte.inflate(R.layout.element_sliderandtext, ll_rightside, false);
TextView submittedByTextView = (TextView) inflatedView.findViewById(R.id.txt_underseekbar);
submittedByTextView.setText(undertimearray[i]);
//rl_seekbarandtext=(RelativeLayout)inflatedView. findViewById(R.id.rl_seekbarandtext);
myseekbar = (TextThumbSeekBar) inflatedView.findViewById(R.id.myseekbar);
tvProgress = (TextView) inflatedView.findViewById(R.id.tv_progress);
myseekbar.setMax(50);
ll_tempvalues.post(new Runnable() {
@Override
public void run() {
height = ll_tempvalues.getHeight();
// Log.e("TAG", "TAG" + "=height=" + height);
}
});
ll_rightside.addView(inflatedView);
}
以下是我们尝试实现的在缩略图上方显示浮动文本的方法:
myseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
final RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
p.addRule(RelativeLayout.ALIGN_RIGHT, seekBar.getId());
Rect thumbRect = myseekbar.getSeekBarThumb().getBounds();
Log.v("TAG", "ThumbRect Region : " + thumbRect.centerX());
p.setMargins(0, thumbRect.centerY() *12, 0, 0);
// tvProgress.setPadding(thumbRect.centerY() * 2, 0, 0, 0);
tvProgress.setVisibility(View.VISIBLE);
tvProgress.setLayoutParams(p);
//tvProgress.setY(progress * 10);
tvProgress.setText(String.valueOf(progress));
tvProgress.invalidate();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
tvProgress.setVisibility(View.GONE);
}
});
我们面临的问题是未调用 onStopTrackingTouch,因此未隐藏进度文本。我们也没有在 onTouchEvent 侦听器中的 ACTION_CANCEL 中获得任何状态。
我借助 link 的拇指和垂直搜索栏: [拇指 link 并添加 canvas.rotate(-90); canvas.translate(-getHeight(), 0);] 垂直搜索栏1
您似乎已经扩展了 SeekBar class 并根据您共享的图像创建了自定义 SeekBar。我曾经遇到过同样的问题。
解决这个问题的方法是,你可以拿一个 boolean
标志,并在 canvas 上绘制文本,方法是向你传递给正在绘制的文本的值添加一些额外的值拇指.
您可以通过添加以下函数来切换 boolean
值
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
boolean ret = super.dispatchTouchEvent(event);
showPopup = event.getAction() != MotionEvent.ACTION_UP;
return ret;
}
其中 showPopup
是 boolean
值。 onDraw函数如下
String progressText = String.valueOf(getProgress() + 60);
Rect bounds = new Rect();
mTextPaint.getTextBounds(progressText, 0, progressText.length(), bounds);
int leftPadding = getPaddingLeft() - getThumbOffset();
float progressRatio = (float) getProgress() / getMax();
float thumbOffset = mThumbSize * (.4f - progressRatio);
float thumbX = progressRatio * getHeight() + leftPadding + thumbOffset;
float thumbY = getWidth() / 2.05f + bounds.width() / 2.15f;
canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), thumbY + getResources().getDimension(R.dimen.s_5sp), mTextPaint);//Text on thumb
if (showPopup)//Text above thumb position
canvas.drawText(progressText, thumbX - getResources().getDimension(R.dimen.s_5sp), (thumbY + getResources().getDimension(R.dimen.s_5sp) - 40), mTextPaint);