Android自定義view圓并隨手指移動
更新時間:2017年08月28日 11:51:31 作者:heibuke
這篇文章主要為大家詳細(xì)介紹了Android自定義view圓并隨手指移動,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Android自定義view圓并隨手指移動的具體代碼,供大家參考,具體內(nèi)容如下
main代碼
public class MainActivity extends AppCompatActivity { private int screenW; //屏幕寬度 private int screenH; //屏幕高度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Display dis = this.getWindowManager().getDefaultDisplay(); // 設(shè)置全屏 requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 獲取屏幕寬度 screenW = dis.getWidth(); // 獲取屏幕高度 screenH = dis.getHeight(); setContentView(new MyView(this)); } //自定義繪圖類 class MyView extends View { private Paint paint; //定義畫筆 private float cx = 50; //圓點默認(rèn)X坐標(biāo) private float cy = 50; //圓點默認(rèn)Y坐標(biāo) private int radius = 20; //定義顏色數(shù)組 private int colorArray[] = {Color.BLACK,Color.BLACK,Color.GREEN,Color.YELLOW, Color.RED}; private int paintColor = colorArray[0]; //定義畫筆默認(rèn)顏色 public MyView(Context context) { super(context); //初始化畫筆 initPaint(); } private void initPaint(){ paint = new Paint(); //設(shè)置消除鋸齒 paint.setAntiAlias(true); //設(shè)置畫筆顏色 paint.setColor(paintColor); } //重寫onDraw方法實現(xiàn)繪圖操作 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //將屏幕設(shè)置為白色 canvas.drawColor(Color.WHITE); //修正圓點坐標(biāo) revise(); //隨機(jī)設(shè)置畫筆顏色 setPaintRandomColor(); //繪制小圓作為小球 canvas.drawCircle(cx, cy, radius, paint); } //為畫筆設(shè)置隨機(jī)顏色 private void setPaintRandomColor(){ Random rand = new Random(); int randomIndex = rand.nextInt(colorArray.length); paint.setColor(colorArray[randomIndex]); } //修正圓點坐標(biāo) private void revise(){ if(cx <= radius){ cx = radius; }else if(cx >= (screenW-radius)){ cx = screenW-radius; } if(cy <= radius){ cy = radius; }else if(cy >= (screenH-radius)){ cy = screenH-radius; } } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: // 按下 cx = (int) event.getX(); cy = (int) event.getY(); // 通知重繪 postInvalidate(); //該方法會調(diào)用onDraw方法,重新繪圖 break; case MotionEvent.ACTION_MOVE: // 移動 cx = (int) event.getX(); cy = (int) event.getY(); // 通知重繪 postInvalidate(); break; case MotionEvent.ACTION_UP: // 抬起 cx = (int) event.getX(); cy = (int) event.getY(); // 通知重繪 postInvalidate(); break; } /* * 備注1:此處一定要將return super.onTouchEvent(event)修改為return true,原因是: * 1)父類的onTouchEvent(event)方法可能沒有做任何處理,但是返回了false。 * 2)一旦返回false,在該方法中再也不會收到MotionEvent.ACTION_MOVE及MotionEvent.ACTION_UP事件。 */ //return super.onTouchEvent(event); return true; } } }
布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.sn.MainActivity"> <com.example.sn.MainActivity.MyView android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android基于SwipeRefreshLayout實現(xiàn)類QQ的側(cè)滑刪除
本篇文章主要介紹了android基于SwipeRefreshLayout實現(xiàn)類QQ的側(cè)滑刪除,非常具有實用價值,需要的朋友可以參考下2017-10-10詳解Flutter自定義應(yīng)用程序內(nèi)鍵盤的實現(xiàn)方法
本文將展示如何利用Flutter創(chuàng)建自定義鍵盤小部件,用于在自己的應(yīng)用程序中的Flutter TextField中輸入文本,感興趣的小伙伴可以了解一下2022-06-06Android 實現(xiàn)單線程輪循機(jī)制批量下載圖片
這篇文章主要介紹了Android 單線程輪循機(jī)制批量下載圖片的相關(guān)資料,這里對實現(xiàn)步驟做了詳細(xì)介紹,需要的朋友可以參考下2017-07-07android Setting中隱藏項實現(xiàn)原理與代碼
我們都知道做程序員有時會就像android中,程序員在setting中就隱藏這樣一項,接下來將詳細(xì)介紹,感興趣的朋友可以了解下哦2013-01-01Android應(yīng)用中制作選中后圖標(biāo)變大浮動效果的代碼分享
這篇文章主要介紹了Android應(yīng)用中制作選中后圖標(biāo)變大浮動效果的代碼分享,這里作者舉了一個體育賽事app的例子,需要的朋友可以參考下2016-02-02Android?nonTransitiveRClass資源沖突問題淺析
這篇文章主要介紹了Android?nonTransitiveRClass資源沖突問題,別搞錯了,nonTransitiveRClass不能解決資源沖突,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12