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,當我們移 標的時候,計算出移動後的圖示的角度,知道角度和半徑就可以設定它的座標啊,...