自定義View之遊戲搖桿鍵盤實現

2021-08-07 12:35:02 字數 2469 閱讀 9435

原本的專案,操作方向的方式為上下左右,左上需要同時按住左鍵和右鍵的方式進行操作。

近來公升級專案,操作方式改為類似王者榮耀的搖桿操作。如下圖:

實現遙感按鈕,需要繪製背景,繪製中心的遙感按鈕。繪製遙感背景,需要建立乙個remoteviewbg類,儲存背景圖,減少重複建立bitmap。remoteviewbg類**如下:

public class remoteviewbg 

//背景的繪圖函式

public void draw(canvas canvas, paint paint, rect src0 ,rect dst0 )

}

重寫系統的觸控時間,判斷觸控點在背景範圍內還是背景範圍外

@override

public boolean ontouchevent(motionevent event) else

} else if (event.getaction() == motionevent.action_up)

return true;

}

通過 event.getx(), event.gety()獲得當前的觸控點,與圓點進行計算,獲取弧度

/***

* 得到兩點之間的弧度

*/public float getrad(float px1, float py1, float px2, float py2)

return rad;

}

通過 canvas.drawcircle()和 canvas.drawbitmap()分別進行遙感按鈕和遙感背景的繪製,注意對遙感背景的儲存,如果在繪製的時候每次bitmapfactory.decoderesource()會增加耗時,因此只需在su***cecreated()中進行bitmap的生成即可。

public void draw()  catch (exception e)  finally  catch (exception e2) }}

在activity中動態新增

relativelayout relativelayout = (relativelayout) findviewbyid(r.id.dance_relative_layout);

remotesu***ceview = new remotesu***ceview(this);

params = new relativelayout.layoutparams(relativelayout.layoutparams.match_parent,

relativelayout.layoutparams.match_parent);

remotesu***ceview.setlayoutparams(params);

relativelayout.addview(remotesu***ceview);

public class remotesu***ceview extends su***ceview implements callback, runnable 

public void su***cecreated(su***ceholder holder)

/***

* 得到兩點之間的弧度

*/public float getrad(float px1, float py1, float px2, float py2)

return rad;

}@override

public boolean ontouchevent(motionevent event) else

} else if (event.getaction() == motionevent.action_up)

return true;

}public void getxy(float x, float y, float r, double rad)

public void draw() catch (exception e) finally catch (exception e2)

}}public void run() catch (exception ex)

}}public void su***cechanged(su***ceholder holder, int format, int width, int height)

public void su***cedestroyed(su***ceholder holder)

}

近來在趕專案,因此本文語言組織較為隨意,且看且看吧,覺得有用,不妨動動手關注下博主。

實訓 自定義View

1.自定義view分為自繪控制項和重寫控制項 2.自繪控制項 建立乙個類繼承view,通過重寫ondraw方法,使用canvas,paint等工具完成繪製,然後在activity的布局中引用建立乙個子執行緒,每隔1s重新整理new thread new runnable catch interrup...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...

Android自定義控制項之自定義View 二

效果如下圖 1 自定義ringview繼承view新增其構造方法並建立畫筆 public class ringview extends view protected boolean isrunning false public ringview context context public ring...