寻求进度条无法正常工作
Seek bar progress not working properly
首先我想说我不是英语所以请原谅我的语言错误。
好吧,我有两个重叠的 SeekBar,一个 (seekbar2) 带有一个作为拇指的警报符号,另一个 (seekbar) 带有一个可以是 "zzz" 或斜线的拇指。
这个想法是,当您将搜索栏向右移动时,第二个搜索栏将斜线设置为拇指,并且拇指 alpha 根据搜索栏的进度而增长,并且它与第二个搜索栏中的警报徽标重叠,以便当进度为 100% 时最终结果是一个划线的闹钟(解除闹钟的符号),完全相同,但在另一个方向上带有 "zzz" 图标,因此当进度为 0 时,结果是贪睡闹钟符号。
你懂我的意思吗?
事实是:这在 Lollipop(sdk 版本 21)中运行良好,但在旧版本中则不然。在旧版本中,第二个搜索栏从正确的点开始,但它比第二个移动得更多,所以最终结果是一个警报和一个斜线(或 "zzz"),我不知道为什么。
这是我的activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="#ffffff">
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar2"
android:progress="50"
android:thumb="@drawable/ic_thumb"
android:secondaryProgress="@android:color/transparent"
android:progressDrawable="@drawable/line"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="90dp"
android:paddingRight="35dp"
android:paddingLeft="35dp"/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:progress="50"
android:thumb="@drawable/ic_thumb"
android:secondaryProgress="@android:color/transparent"
android:progressDrawable="@drawable/line"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="90dp"
android:paddingRight="35dp"
android:paddingLeft="35dp"/>
这是我的MainActivity.java:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
final SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
final Drawable dismiss = getResources().getDrawable(R.drawable.ic_dismiss);
final Drawable snooze = getResources().getDrawable(R.drawable.ic_thumb_snooze);
final Drawable alarm = getResources().getDrawable(R.drawable.ic_thumb);
seekBar2.setMax(255);
seekBar.setMax(255);
seekBar.setProgress(seekBar.getMax()/2);
seekBar2.setProgress(seekBar.getMax()/2);
seekBar2.setEnabled(false);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seekBar2.setProgress(progress);
if (progress >seekBar.getMax()/2 && fromUser && progress!=seekBar.getMax()){
seekBar.setThumb(dismiss);
dismiss.setAlpha((progress - (seekBar.getMax() / 2)) * 2);//*2*255
}
else if (progress <seekBar.getMax()/2 && fromUser && progress!=0){
seekBar.setThumb(snooze);
snooze.setAlpha(Math.abs((progress - (seekBar.getMax() / 2)) * 2));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e("progress2",seekBar.getProgress()+"");
int progress = seekBar.getProgress();
if (progress <seekBar.getMax()/2) {
if (progress < (seekBar.getMax() / 100 * 25)) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
Toast.makeText(MainActivity.this, "Snoozed!", Toast.LENGTH_LONG).show();
finish();
} else {
seekBar.setProgress(seekBar.getMax() / 2);
seekBar.setThumb(alarm);
}
}else if (progress >seekBar.getMax()/2){
if (progress >(seekBar.getMax())/100*98){
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
Toast.makeText(MainActivity.this,"Dismissed!",Toast.LENGTH_LONG).show();
finish();
}
else{
seekBar.setProgress(seekBar.getMax()/2);
seekBar.setThumb(alarm);
}
}
}
});
}
}
有什么想法吗?
感谢您对所有答案的建议!
编辑:
这是一个视频,展示了在棒棒糖(第一部分)中如何工作(正确工作)以及在棒棒糖之前(第二部分)如何工作(错误工作):
https://drive.google.com/file/d/0BzFDeTFWJtOLWnZOZG9OSHRfM0U/view?usp=sharing
在为 seekBar
设置 OnSeekBarChangeListener
之前尝试添加这两行:
final Drawable seekBar2Thumb = getResources().getDrawable(
R.drawable.line);
seekBar2.setThumb(seekBar2Thumb);
在 SeekBar
的 android 文档中:
http://developer.android.com/reference/android/widget/AbsSeekBar.html
for setThumb(Drawable thumb)
它表示当您设置有效的 Drawable
时,thumb 偏移量会被修改,这在您为 seekBar
.[=18 设置 thumb 时发生=]
首先我想说我不是英语所以请原谅我的语言错误。 好吧,我有两个重叠的 SeekBar,一个 (seekbar2) 带有一个作为拇指的警报符号,另一个 (seekbar) 带有一个可以是 "zzz" 或斜线的拇指。 这个想法是,当您将搜索栏向右移动时,第二个搜索栏将斜线设置为拇指,并且拇指 alpha 根据搜索栏的进度而增长,并且它与第二个搜索栏中的警报徽标重叠,以便当进度为 100% 时最终结果是一个划线的闹钟(解除闹钟的符号),完全相同,但在另一个方向上带有 "zzz" 图标,因此当进度为 0 时,结果是贪睡闹钟符号。 你懂我的意思吗? 事实是:这在 Lollipop(sdk 版本 21)中运行良好,但在旧版本中则不然。在旧版本中,第二个搜索栏从正确的点开始,但它比第二个移动得更多,所以最终结果是一个警报和一个斜线(或 "zzz"),我不知道为什么。
这是我的activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="#ffffff">
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar2"
android:progress="50"
android:thumb="@drawable/ic_thumb"
android:secondaryProgress="@android:color/transparent"
android:progressDrawable="@drawable/line"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="90dp"
android:paddingRight="35dp"
android:paddingLeft="35dp"/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:progress="50"
android:thumb="@drawable/ic_thumb"
android:secondaryProgress="@android:color/transparent"
android:progressDrawable="@drawable/line"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_marginBottom="90dp"
android:paddingRight="35dp"
android:paddingLeft="35dp"/>
这是我的MainActivity.java:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
final SeekBar seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
final Drawable dismiss = getResources().getDrawable(R.drawable.ic_dismiss);
final Drawable snooze = getResources().getDrawable(R.drawable.ic_thumb_snooze);
final Drawable alarm = getResources().getDrawable(R.drawable.ic_thumb);
seekBar2.setMax(255);
seekBar.setMax(255);
seekBar.setProgress(seekBar.getMax()/2);
seekBar2.setProgress(seekBar.getMax()/2);
seekBar2.setEnabled(false);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seekBar2.setProgress(progress);
if (progress >seekBar.getMax()/2 && fromUser && progress!=seekBar.getMax()){
seekBar.setThumb(dismiss);
dismiss.setAlpha((progress - (seekBar.getMax() / 2)) * 2);//*2*255
}
else if (progress <seekBar.getMax()/2 && fromUser && progress!=0){
seekBar.setThumb(snooze);
snooze.setAlpha(Math.abs((progress - (seekBar.getMax() / 2)) * 2));
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.e("progress2",seekBar.getProgress()+"");
int progress = seekBar.getProgress();
if (progress <seekBar.getMax()/2) {
if (progress < (seekBar.getMax() / 100 * 25)) {
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
Toast.makeText(MainActivity.this, "Snoozed!", Toast.LENGTH_LONG).show();
finish();
} else {
seekBar.setProgress(seekBar.getMax() / 2);
seekBar.setThumb(alarm);
}
}else if (progress >seekBar.getMax()/2){
if (progress >(seekBar.getMax())/100*98){
((Vibrator) getSystemService(VIBRATOR_SERVICE)).vibrate(250);
Toast.makeText(MainActivity.this,"Dismissed!",Toast.LENGTH_LONG).show();
finish();
}
else{
seekBar.setProgress(seekBar.getMax()/2);
seekBar.setThumb(alarm);
}
}
}
});
}
}
有什么想法吗? 感谢您对所有答案的建议!
编辑: 这是一个视频,展示了在棒棒糖(第一部分)中如何工作(正确工作)以及在棒棒糖之前(第二部分)如何工作(错误工作): https://drive.google.com/file/d/0BzFDeTFWJtOLWnZOZG9OSHRfM0U/view?usp=sharing
在为 seekBar
设置 OnSeekBarChangeListener
之前尝试添加这两行:
final Drawable seekBar2Thumb = getResources().getDrawable(
R.drawable.line);
seekBar2.setThumb(seekBar2Thumb);
在 SeekBar
的 android 文档中:
http://developer.android.com/reference/android/widget/AbsSeekBar.html
for setThumb(Drawable thumb)
它表示当您设置有效的 Drawable
时,thumb 偏移量会被修改,这在您为 seekBar
.[=18 设置 thumb 时发生=]