2013-07-01 8 views

उत्तर

10

मुझे एक ही समस्या का सामना करना पड़ा। सही दिशा को इंगित करने के लिए Commonsware के लिए धन्यवाद। मैंने समाधान प्राप्त करने के लिए code.google.com/p/range-seek-bar द्वारा प्रेरित कक्षा लिखी)।

https://github.com/vashisthg/StartPointSeekBar

+0

यह! बहुत अच्छा! मुझे अंगूठे को थोड़ा बड़ा लगता है लेकिन यह निश्चित रूप से समायोज्य है, बाएं और दाएं रंग में बदलने के लिए भी बहुत आसान था। केवल सेट नॉर्मलाइज्ड वैल्यू सेट करने में कठिनाई हो रही है, जब -1 पर सेट की जाती है, तो यह बाईं ओर सभी तरह से शुरू होती है, जब 1 पर सेट होती है तो यह दाईं तरफ से सभी तरह से शुरू होती है। इसे केंद्रित – CularBytes

+1

समाधान सेट करने के लिए नहीं मिल सकता है: 0 और 1 के बीच मान, जहां 0.5 केंद्र है। – CularBytes

+1

क्या यह कस्टम खोज बार लंबवत होने के लिए सेट है? – filipst

2

बीच में शुरू करने के लिए, आप यह है कि अपनी पूरी सीमा के आधे एक मूल्य के साथ setProgress() कॉल कर सकते हैं।

बीच में SeekBar शुरू किया है और एक को समाप्त करने के लिए जाने के लिए, आपको SeekBar के लिए अपने स्वयं के प्रतिस्थापन बना सकते हैं या खोजने की आवश्यकता होगी (यानी, अपने ब्लू लाइन बाईं ओर या बीच में से सही करने के लिए बीच में से चलाता है) किसी और ने ऐसा किया है, क्योंकि यह SeekBar द्वारा समर्थित नहीं है।

+0

'खुद SeekBa के लिए प्रतिस्थापन आर', आप मीन 'शैली'? – lysenkobv

+0

@lysenkobv: नहीं, मेरा मतलब जावा क्लास है। 'SeekBar', जो 'प्रोग्रेसबार' से प्राप्त होता है, उसे बाएं किनारे पर बार के शुरुआती बिंदु को रखने के लिए डिज़ाइन किया गया है। अगर मैं शैली के माध्यम से बदला जा सकता हूं तो मैं आश्चर्यचकित हूं। मुझे उम्मीद है कि आपको अपना खुद का 'व्यू' बनाना होगा जो इसे संभालता है। उदाहरण के लिए, 'रेंजसेकबार' (https://code.google.com/p/range-seek-bar/) को 'छवि दृश्य' के उप-वर्ग के रूप में कार्यान्वित किया गया था, उस मामले को संभालने के लिए जहां आप एक के बजाय दो अंगूठे चाहते हैं। – CommonsWare

4

customSeekBar

से ऊपर सभी ने कहा, यह मेरी हमारे स्वयं के कस्टम seekbar को लागू करने से प्राप्त किया जा सकता है।

मैंने निम्नलिखित तरीके से प्रयास किया और यह मेरे लिए काम किया।

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> 

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); 
    } 
    } 

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); 
    } 
} 
संबंधित मुद्दे