के ड्रॉ पथ पर उपयोगकर्ता स्पर्श का पता लगाएं मैं एक कस्टम व्यू बना रहा हूं जो कि एक प्रकार का आर्क स्लाइडर प्रगति दृश्य है। मैं उपयोगकर्ता को स्पर्श करने के आधार पर चाप के अधिक या कम खींच सकता हूं (x पर धुरी) स्वीप की गणना करके, मैं पहली बार उस परिक्रमा की गणना करके ऐसा करता हूं जहां उपयोगकर्ता एक्स अक्ष के साथ छूता है .0% बायीं ओर सभी तरह से होगा और 100% दाहिने ओर सभी तरह से होगा।कस्टम व्यू drawArc, आर्क
मैं इसे एक कदम आगे ले जाना चाहता हूं, बजाय उपयोगकर्ता द्वारा दबाए गए एक्स समन्वय के आधार पर चाप को खींचने के बजाय, मैं इसे केवल तब स्थानांतरित करना चाहता हूं जब उपयोगकर्ता वास्तविक आर्क ड्रा पथ पर छूता है, इसलिए यह और यथार्थवादी है । मैं अभी भी कस्टम दृश्य और मेरे गणित के लिए नए सीमित है हूँ, लेकिन मैं आभारी धन्यवाद
class ArcProgress extends View {
Context cx;
float width;
float height;
float center_x, center_y;
final RectF oval = new RectF();
final RectF touchArea = new RectF();
float sweep = 0;
float left, right;
int percent = 0;
public ArcProgress(Context context) {
super(context);
cx = context;
}
public int getPercentage() {
return percent;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setBackgroundColor(0xfff0ebde);
width = (float) getWidth();
height = (float) getHeight();
float radius;
if (width > height) {
radius = height/3;
} else {
radius = width/3;
}
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(0xffd2c8b6);
paint.setStrokeWidth(35);
paint.setStyle(Paint.Style.STROKE);
center_x = width/2;
center_y = height/2;
left = center_x - radius;
float top = center_y - radius;
right = center_x + radius;
float bottom = center_y + radius;
oval.set(left, top, right, bottom);
//this is the background arc, it remains constant
canvas.drawArc(oval, 180, 180, false, paint);
paint.setStrokeWidth(10);
paint.setColor(0xffe0524d);
//this is the red arc whichhas its sweep argument manipulated by on touch
canvas.drawArc(oval, 180, sweep, false, paint);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
float xPosition = event.getX();
float yPosition = event.getY();
if (oval.contains(xPosition, yPosition)) {
float x = xPosition - left;
float s = x * 100;
float b = s/oval.width();
percent = Math.round(b);
sweep = (180/100.0f) * (float) percent;
invalidate();
} else {
if (xPosition < left) {
percent = 0;
sweep = (180/100.0f) * (float) percent;
invalidate();
}
if (xPosition > right) {
percent = 100;
sweep = (180/100.0f) * (float) percent;
invalidate();
}
}
}
return true;
}
}
मेरी इच्छा है कि मैं 2 शीर्ष उत्तरों का चयन करूंगा, मैं आपको क्लिक करूँगा धन्यवाद लाखों – brux
कोई चिंता नहीं, मदद करने में प्रसन्नता :) – Plato
मैंने अपना दिमाग बदल दिया और यह सही बना दिया क्योंकि मुझे अभी भी पूरी तरह से मेरे सिर को नहीं मिला है लेकिन आपका कोड काम करता है, क्या आप किसी भी मौके से आईआरसी पर हैं? – brux