में मिनट का हाथ ले जाएं मैं अवधारणा ऐप का एक सरल सबूत लिखने की कोशिश कर रहा हूं जो उपयोगकर्ता को घड़ी के मिनट के घूमने की अनुमति देता है। मुझे OnTouchEvent के लिए सही तर्क के साथ आने में कठिनाई हो रही है।Android घड़ी
अब तक मैं निम्नलिखित कोड है:
public boolean onTouchEvent(MotionEvent e) {
float x = e.getX();
float y = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_MOVE:
//find an approximate angle between them.
float dx = x-cx;
float dy = y-cy;
double a=Math.atan2(dy,dx);
this.degree = Math.toDegrees(a);
this.invalidate();
}
return true;
}
protected void onDraw(Canvas canvas) {
super .onDraw(canvas);
boolean changed = mChanged;
if (changed) {
mChanged = false;
}
int availableWidth = getRight() - getLeft();
int availableHeight = getBottom() - getTop();
int x = availableWidth/2;
int y = availableHeight/2;
cx = x;
cy = y;
final Drawable dial = mDial;
int w = dial.getIntrinsicWidth() + 100;
int h = dial.getIntrinsicHeight() + 100;
boolean scaled = false;
if (availableWidth < w || availableHeight < h) {
scaled = true;
float scale = Math.min((float) availableWidth/(float) w, (float) availableHeight/(float) h);
canvas.save();
canvas.scale(scale, scale, x, y);
}
if (changed)
{
dial.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2));
}
dial.draw(canvas);
canvas.save();
float hour = mHour/12.0f * 360.0f;
canvas.rotate(hour, x, y);
final Drawable hourHand = mHourHand;
if (changed) {
w = hourHand.getIntrinsicWidth() + 30;
h = hourHand.getIntrinsicHeight() + 30;
hourHand.setBounds(x - (w/2), y - (h/2), x + (w/2), y + (h/2));
}
hourHand.draw(canvas);
canvas.restore();
canvas.save();
float minute = mMinutes/60.0f * 360.0f;
if (bearing == 0)
{
canvas.rotate(minute, x, y);
}
else
{
canvas.rotate((float)bearing, x, y);
}
final Drawable minuteHand = mMinuteHand;
if (changed) {
w = minuteHand.getIntrinsicWidth() + 30;
h = minuteHand.getIntrinsicHeight() + 30;
minuteHand.setBounds(x - w, y - h, x + w, y + h);
}
minuteHand.draw(canvas);
canvas.restore();
if (scaled) {
canvas.restore();
}
}
फिर उस आधार पर, मेरे OnDraw विधि निर्दिष्ट "this.degree" (सिर्फ canvas.rotate कॉल) के लिए सूई घूमता है। मुझे लगता है कि मेरा गणित यहां बंद है। मैंने यहां उदाहरण का पालन करने की कोशिश की: Calculate angle for rotation in Pie Chart, लेकिन यह अभी भी मिनट के हाथ को सही ढंग से घूर्णन नहीं कर रहा है। किसी भी सहायता की सराहना की जाएगी।
धन्यवाद। मैं अपने केंद्र बिंदु को दोबारा जांचूंगा। मुझे लगता है कि मुद्दा यह है कि केंद्र बिंदु पूरी स्क्रीन के सापेक्ष है, न कि घड़ी। तो यह 240, 240 की तरह कुछ है। यह असली मुद्दा हो सकता है। विचार? – bek
@ user968322 मैंने रोटेशन – JesusFreke
के केंद्र के बारे में कुछ अतिरिक्त विवरण जोड़े हैं, अभी भी कोई भाग्य नहीं है। यह यादृच्छिक दिशाओं में जाने शुरू होता है। मेरी पोस्ट में मूल कोड अपडेट किया गया। – bek