मैं this के समान कुछ करने की कोशिश कर रहा हूं लेकिन एंड्रॉइड में।कस्टम प्रोग्रेसबार विजेट
एंड्रॉयड में मैं ProgressBar
विस्तार कर सकते हैं, लेकिन मैं कैसे शीर्ष पर TextViews
जोड़ने के लिए की शक कर रहा हूँ। आईफोन में यह आसान था क्योंकि मैं पूर्ण पदों का उपयोग कर सकता हूं, लेकिन यहां नहीं।
कोई विचार?
संपादित करें: मैंने अंगूठे को खींचने के लिए ProgressBar
के बजाय SeekBar
का उपयोग करने का निर्णय लिया। मैंने नीचे टिप्पणी की। कुछ बिंदुओं पर ध्यान दें:
- मैं हार्डकोडेड मानों का उपयोग कर रहा हूं, वास्तव में तीन लेकिन यह कम या ज्यादा हो सकता है।
- जब अंगूठे को स्थानांतरित किया जाता है तो यह 50 तक चलता है लेकिन इसे विभिन्न विकल्पों में जाना चाहिए।
- मैं डीपीआई के बजाय पिक्सेल का उपयोग कर रहा हूं। मुझे इसे ठीक करना चाहिए।
- अंगूठे की चाल के दौरान मुझे एनीमेशन की कमी को हल करने की आवश्यकता है।
मेरे प्रगति अब तक:
public class SliderFrameLayout extends FrameLayout implements OnSeekBarChangeListener {
private SeekBar mSlider;
private Context mContext;
private int mSize = 3;
private TextView[] mTextViews;
private String[] mTexts = {"Nafta", "Gas", "Gasoil"};
public SliderFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
setWillNotDraw(false);
mTextViews = new TextView[mSize];
addSlider();
addTextViews();
}
private void addTextViews() {
for (int i=0 ; i < mSize ; i++) {
TextView tv;
tv = new TextView(mContext);
tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
tv.setText(mTexts[i]);
mTextViews[i] = tv;
addView(tv);
}
}
private void addSlider() {
FrameLayout fl = new FrameLayout(mContext, null);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
fl.setLayoutParams(params);
fl.setPadding(30, 30, 30, 0);
mSlider = new SeekBar(mContext, null);
LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
//lp.setMargins(30, 30, 30, 0);
//mSlider.setPadding(30, 30, 30, 0);
mSlider.setLayoutParams(lp);
//mSlider.setMax(mSize-1);
mSlider.setThumbOffset(30);
//mSlider.setProgressDrawable(mContext.getResources().getDrawable(R.drawable.slider_track));
//mSlider.setThumb(mContext.getResources().getDrawable(R.drawable.slider_thumb));
mSlider.setOnSeekBarChangeListener(this);
//addView(mSlider);
fl.addView(mSlider);
addView(fl);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Rect rectf = new Rect();
mSlider.getLocalVisibleRect(rectf);
Log.d("WIDTH :",String.valueOf(rectf.width()));
Log.d("HEIGHT :",String.valueOf(rectf.height()));
Log.d("left :",String.valueOf(rectf.left));
Log.d("right :",String.valueOf(rectf.right));
Log.d("top :",String.valueOf(rectf.top));
Log.d("bottom :",String.valueOf(rectf.bottom));
int sliderWidth = mSlider.getWidth();
int padding = sliderWidth/(mSize-1);
for (int i=0 ; i < mSize ; i++) {
TextView tv = mTextViews[i];
tv.setPadding(i* padding, 0, 0, 0);
}
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
Log.d("SEEK", "value: " + seekBar.getProgress());
seekBar.setProgress(50);
}
}
क्या आपने आईफोन में एक जैसी प्रगति की है? –
@ न्यूटॉयओएस: हाँ। बहुत समय पहले :) – Macarse