मैं लिख रहा हूं कि एक गेम में एक रेडियल मेनू बनाने के लिए देख रहा हूँ। क्या इस श्रेणी या एपीआई को ओपन सोर्स सॉल्यूशन में सहायता करने के लिए शामिल किया गया है?एंड्रॉइड रेडियल/पाई मेनू
कुछ this की तरह कुछ।
धन्यवाद, जेक
मैं लिख रहा हूं कि एक गेम में एक रेडियल मेनू बनाने के लिए देख रहा हूँ। क्या इस श्रेणी या एपीआई को ओपन सोर्स सॉल्यूशन में सहायता करने के लिए शामिल किया गया है?एंड्रॉइड रेडियल/पाई मेनू
कुछ this की तरह कुछ।
धन्यवाद, जेक
नीचे देखें वर्ग OnDraw रेडियल मेनू ड्रा करने के लिए() विधि ..
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mRadialMenuPaint.setShadowLayer(mShadowRadius, 0.0f, 0.0f, mShadowColor);
//Draw the menu if the menu is to be displayed.
if(isMenuVisible) {
canvas.drawArc(mMenuRect, mStartAngle, 180, true, mRadialMenuPaint);
//See if there is any item in the collection
if(mMenuItems.size() > 0) {
float mStart = mStartAngle;
//Get the sweep angles based on the number of menu items
float mSweep = 180/mMenuItems.size();
for(SemiCircularRadialMenuItem item : mMenuItems.values()) {
mRadialMenuPaint.setColor(item.getBackgroundColor());
item.setMenuPath(mMenuCenterButtonRect, mMenuRect, mStart, mSweep, mRadius, mViewAnchorPoints);
canvas.drawPath(item.getMenuPath(), mRadialMenuPaint);
if(isShowMenuText) {
mRadialMenuPaint.setShadowLayer(mShadowRadius, 0.0f, 0.0f, Color.TRANSPARENT);
mRadialMenuPaint.setColor(item.getTextColor());
canvas.drawTextOnPath(item.getText(), item.getMenuPath(), 5, textSize, mRadialMenuPaint);
mRadialMenuPaint.setShadowLayer(mShadowRadius, 0.0f, 0.0f, mShadowColor);
}
item.getIcon().draw(canvas);
mStart += mSweep;
}
mRadialMenuPaint.setStyle(Style.FILL);
}
}
//Draw the center menu toggle piece
mRadialMenuPaint.setColor(centerRadialColor);
canvas.drawArc(mMenuCenterButtonRect, mStartAngle, 180, true, mRadialMenuPaint);
mRadialMenuPaint.setShadowLayer(mShadowRadius, 0.0f, 0.0f, Color.TRANSPARENT);
//Draw the center text
drawCenterText(canvas, mRadialMenuPaint);
}
और भी एक्स प्रबंधित है, टच घटना पर वाई Cordinates आइटम मेनू को छूने के लिए
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if(mMenuCenterButtonRect.contains(x, y-15)) {
centerRadialColor = RadialMenuColors.HOLO_LIGHT_BLUE;
isMenuTogglePressed = true;
invalidate();
}
else if(isMenuVisible) {
if(mMenuItems.size() > 0) {
for(SemiCircularRadialMenuItem item : mMenuItems.values()) {
if(mMenuRect.contains((int) x+20, (int) y))
if(item.getBounds().contains((int) x+20, (int) y)) {
System.out.println("get x...> " + x);
System.out.println("get y...> " + y);
isMenuItemPressed = true;
mPressedMenuItemID = item.getMenuID();
break;
}
}
mMenuItems.get(mPressedMenuItemID).setBackgroundColor(mMenuItems.get(mPressedMenuItemID).getMenuSelectedColor());
invalidate();
}
}
break;
case MotionEvent.ACTION_UP:
if(isMenuTogglePressed) {
centerRadialColor = Color.WHITE;
if(isMenuVisible) {
isMenuVisible = false;
centerMenuText = openMenuText;
} else {
isMenuVisible = true;
centerMenuText = closeMenuText;
}
isMenuTogglePressed = false;
invalidate();
}
if(isMenuItemPressed) {
if(mMenuItems.get(mPressedMenuItemID).getCallback() != null) {
mMenuItems.get(mPressedMenuItemID).getCallback().onMenuItemPressed();
}
mMenuItems.get(mPressedMenuItemID)
.setBackgroundColor(mMenuItems.get(mPressedMenuItemID).getMenuNormalColor());
isMenuItemPressed = false;
invalidate();
}
break;
}
return true;
}
कोड के ऊपर सहायक होने के लिए आशा है ..
नहीं है ऐसी कोई मेनू के लिए एपीआई में बनाया गया है, तथापि, वहाँ ऐसा करने के लिए कम से कम दो तरीके इस
1) एक लेआउट का निर्माण अपने "मेनू" का प्रतिनिधित्व करने और के लिए देते आपके एंड्रॉइड व्यू की जड़ पर "फ्रेमलेआउट"। इससे पहले कि आप इसे दृश्यमान करने से पहले तत्व की स्थिति को समायोजित करके, आप इसे स्क्री के चारों ओर ले जा सकते हैं। यह विधि थोड़ा "हैकी" है, लेकिन इसे काम करना चाहिए।
2) अपनी खुद की ड्राइंग विधियों और टच घटनाओं सहित एक पूरी तरह से कस्टम घटक बनाएं, और इसे अपने दृश्य में संलग्न करें। यह विधि काफी जटिल है (आपको सभी ड्राइंग विधियों को लागू करने की आवश्यकता होगी), लेकिन यह कुछ और सामान्य भी है।
किसी भी मामले में, याद रखें कि आपको यह विचार करने की आवश्यकता होगी कि जब उपयोगकर्ता ट्रैकबॉल/डी-पैड का उपयोग कर रहा है तो रेडियल मेनू कैसे काम करता है।
यही मुझे लगता है, लेकिन मैं आशा करता था जी कस्टम घटक पहले से मौजूद है। जानकारी के लिए धन्यवाद। –
क्या आप मुझे दिखा सकते हैं कि कैसे स्वाइप पर रेडियल को स्थानांतरित किया जाए? – AndroidDev
बहुत प्रभावशाली काम! मैं इसे आजमाने के लिए इंतजार नहीं कर सकता! –