lz該公司最近接手乙個專案,需要寫乙個圓形旋轉選單,和選單之間的移動換位支援,我本來以為這樣的demo如若網際網路是非常。想想你媽媽也幫不了我,空旋轉,但它不能改變位置,所以lz我們只能靠自己摸索。
在此貢獻出來給廣大碼農們共享。
話不多說,先上**:
自己定義view類:
public class roundspinview extends view
};};
public inte***ce onroundspinviewlistener
public roundspinview(context context,attributeset attrs)
pfd = new paintflagsdrawfilter(0, paint.anti_alias_flag|paint.filter_bitmap_flag);
mpaint.setcolor(color.white);
mpaint.setstrokewidth(2);
mpaint.setantialias(true); //消除鋸齒
mpaint.setstyle(paint.style.stroke); //繪製空心圓
patheffect effects = new dashpatheffect(new float,1);
mpaint.setpatheffect(effects);
quadranttouched = new boolean ;
mgesturedetector = new gesturedetector(getcontext(),
new mygesturelistener());
setupstones(); }
@override
protected void onmeasure(int widthmeasurespec, int heightmeasurespec)
/*** 初始化每乙個點
*/private void setupstones() else if(angle < 0)
stone.angle = angle;
stone.bitmap = bitmapfactory.decoderesource(getresources(),
startmenu + index);
angle += mdegreedelta;
mstones[index] = stone;
} }/**
* 又一次計算每乙個點的角度
*/private void resetstonesangle(float x, float y)
} /**
* 計算每乙個點的座標
*/private void computecoordinates()
} /**
* 計算某點的角度
* * @param x
* @param y
* @return
*/private int computecurrentangle(float x, float y)
log.d("roundspinview", "x:" + x + ",y:" + y + ",degree:" + degree);
return degree;
} private double startangle;
@override
public boolean dispatchtouchevent(motionevent event)
} else if (event.getaction() == motionevent.action_move) else
} else if (event.getaction() == motionevent.action_up)
computecoordinates();
invalidate();
mcur = -1;
}} // set the touched quadrant to true
quadranttouched[getquadrant(event.getx() - mpointx,
mpointy - event.gety())] = true;
mgesturedetector.ontouchevent(event);
return true;
} private class mygesturelistener extends ******ongesturelistener else
return true;
} @override
public boolean onsingletapup(motionevent e)
// toast.maketext(getcontext(), "position:"+cur, 0).show();
return true;
}return false;
} }private class flingrunnable implements runnable
@override
public void run()
} } /**
* @return the selected quadrant.
*/private static int getquadrant(double x, double y) else
return y >= 0 ?
2 : 3; } /* * 旋轉選單button */ private void rotatebuttons(double degree) else if(mstones[i].angle >=360) } computecoordinates(); invalidate(); } @override public void ondraw(canvas canvas) } /** * 把中心點放到中心處 * * @param canvas * @param bitmap * @param left * @param top */ private void drawincenter(canvas canvas, bitmap bitmap, float left, float top) private int getincircle(int x, int y) } return -1; } public void setonroundspinviewlistener(onroundspinviewlistener listener) class bigstone }
layout檔案**:
此外必須加入attr檔案設定相應的自己定義屬性:
<?xml version="1.0" encoding="utf-8"?>
接下來就是activity中的應用了:
public class mainactivity extends activity implements onroundspinviewlistener
private void initview()
@override
public void onsingletapup(int position)
}}
注意:rsv_test.setonroundspinviewlistener(this);
對自己定義view的自己定義***進行賦值 android圓形旋轉選單,並支援移動換位功能
lz最近接手公司乙個專案,需要寫乙個圓形的旋轉選單,並且支援選單之間的移動換位,本來以為這種demo應該網上是很多的,想不到度娘也是幫不了我,空有旋轉功能但是卻不能換位置,所以lz就只能靠自己摸索了。最終lz參考了網上的部分 重寫了乙個自定義的view終於實現了這個看似很吊,卻沒有實際意義的功能。在...
ios 圓形旋轉選單 實現ios常見選單效果的思路
目前見過的實現邊側選單的效果,比較流行的有以下三種 效果圖 1 選單欄覆蓋在部分主檢視上 1 最開始要實現這個效果,我想最簡單的方式就是 新增uiview,加上乙個self.view大小的子檢視,選單列表以外的區域設為透明灰色。後來發現,如果當前的控制器有顯示導航欄或者工具欄,這個子檢視就無法遮蓋住...
Android 仿酷點圓形選單
看見乙個人寫了乙個圓形的可以轉的選單,當時看的還是挺模糊的,最後自己模仿的寫了一遍,這是源 基本思想是這樣的 1,把每個圖示顯示的什麼圖示確定下來 2,計算每乙個點的座標,3,在activity就可以正確顯示出了 4,當我們移 標的時候,計算出移動後的圖示的角度,知道角度和半徑就可以設定它的座標啊,...