Gau*_*sth 11
我遇到了同样的问题.感谢Commonsware指向正确的方向.我写了一个受code.google.com/p/range-seek-bar启发的课程来获得解决方案.
https://github.com/vashisthg/StartPointSeekBar

综上所述,我可以实现自己的自定义搜索栏。
我以以下方式尝试,对我来说很有效。
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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:layout_margin="20dp">
<com.example.customseekbar.CustomSeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="50"
android:progressDrawable="@android:color/transparent"
android:id="@+id/customSeekBar"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
package com.example.customseekbar;
import com.example.suricustomseekbar.R;
import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
public class MainActivity extends Activity {
SeekBar mseekBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mseekBar = (SeekBar) findViewById(R.id.customSeekBar);
mseekBar.setProgress(50);
}
}
Run Code Online (Sandbox Code Playgroud)
CustomSeekBar.java
package com.example.customseekbar;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.SeekBar;
public class CustomSeekBar extends SeekBar {
private Rect rect;
private Paint paint ;
private int seekbar_height;
public CustomSeekBar(Context context) {
super(context);
}
public CustomSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
rect = new Rect();
paint = new Paint();
seekbar_height = 6;
}
public CustomSeekBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected synchronized void onDraw(Canvas canvas) {
rect.set(0 + getThumbOffset(),
(getHeight() / 2) - (seekbar_height/2),
getWidth()- getThumbOffset(),
(getHeight() / 2) + (seekbar_height/2));
paint.setColor(Color.GRAY);
canvas.drawRect(rect, paint);
if (this.getProgress() > 50) {
rect.set(getWidth() / 2,
(getHeight() / 2) - (seekbar_height/2),
getWidth() / 2 + (getWidth() / 100) * (getProgress() - 50),
getHeight() / 2 + (seekbar_height/2));
paint.setColor(Color.CYAN);
canvas.drawRect(rect, paint);
}
if (this.getProgress() < 50) {
rect.set(getWidth() / 2 - ((getWidth() / 100) * (50 - getProgress())),
(getHeight() / 2) - (seekbar_height/2),
getWidth() / 2,
getHeight() / 2 + (seekbar_height/2));
paint.setColor(Color.CYAN);
canvas.drawRect(rect, paint);
}
super.onDraw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)