android圓形旋轉選單,並支援移動換位功能

2021-06-22 19:48:25 字數 3842 閱讀 9758

lz最近接手公司乙個專案,需要寫乙個圓形的旋轉選單,並且支援選單之間的移動換位,本來以為這種demo應該網上是很多的,想不到度娘也是幫不了我,空有旋轉功能但是卻不能換位置,所以lz就只能靠自己摸索了。

最終lz參考了網上的部分**,重寫了乙個自定義的view終於實現了這個看似很吊,卻沒有實際意義的功能。在此貢獻出來給廣大碼農們共享。

話不多說,先上**:

自定義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;

} /*

* 旋轉選單按鈕

*/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我們只能靠自己摸索。在此貢獻出來給廣大碼農們共享。話不多說,先上 自己定義view類 public class round...

ios 圓形旋轉選單 實現ios常見選單效果的思路

目前見過的實現邊側選單的效果,比較流行的有以下三種 效果圖 1 選單欄覆蓋在部分主檢視上 1 最開始要實現這個效果,我想最簡單的方式就是 新增uiview,加上乙個self.view大小的子檢視,選單列表以外的區域設為透明灰色。後來發現,如果當前的控制器有顯示導航欄或者工具欄,這個子檢視就無法遮蓋住...

Android 仿酷點圓形選單

看見乙個人寫了乙個圓形的可以轉的選單,當時看的還是挺模糊的,最後自己模仿的寫了一遍,這是源 基本思想是這樣的 1,把每個圖示顯示的什麼圖示確定下來 2,計算每乙個點的座標,3,在activity就可以正確顯示出了 4,當我們移 標的時候,計算出移動後的圖示的角度,知道角度和半徑就可以設定它的座標啊,...