安卓實現水波紋動畫效果
阿新 • • 發佈:2019-01-11
步驟1:
首先如果想實現上圖的動畫效果,首先新建一個類然後去繼承view,然後重寫裡面的構造方法(切記選擇裡面帶有兩個
引數的構造方法,因為佈局檔案中需要用到這個類,一般需要在佈局檔案中用到的類都會選擇帶有兩個引數的構造方
法),然後在佈局檔案中引用這個類就行了,如下我的佈局檔案中的程式碼為:
步驟2:
開始在定義的類中寫入相關的方法。
1、重寫onDraw方法,canvas呼叫drawCircle方法,裡面的引數分別是X的座標值,Y的座標值,圓的半徑以及畫筆。x和y的值為大於零的任意數,他們的值決定圓的圓心在螢幕的位置
@Override protected void onDraw(Canvas canvas) { // if (paint.getAlpha() > 0&&downX>0&&downY>0) {canvas.drawCircle(100,100,radius,paint); // handler.sendEmptyMessageDelayed(0, 50); // } }
2、定義一個方法,然後在方法中定義一個畫筆,畫筆的顏色,抗鋸齒等屬性
paint = new Paint();//定義一個畫筆 paint.setColor(Color.RED);//設定畫筆的顏色,畫筆的顏色決定了畫出來是什麼顏色的圓環 //定義抗鋸齒 paint.setAntiAlias(true); //設定樣式 paint.setStyle(Paint.Style.STROKE);// //設定預設的透明度 paint.setAlpha(250); radius = 5;//這是設定內圓的半徑,並且設定為全域性變數 paint.setStrokeWidth(radius /3);//外圓的半徑減去內圓的半徑的結果值,也就是圓環的半徑,我這裡設定為內圓半徑的三分之一
3、這時候你可以執行一下你的程式碼看時候哪個地方報錯或者有問題,如果沒問題的話就可以看到螢幕有一個圓環,只不過沒有動畫效果和點選效果。這時候我們來
實現動畫效果。這裡我使用的Handler傳送訊息來實現動畫效果。定義一個handler重寫handleMessage方法,在這裡就可以取消掉onDraw方法中我加註釋的部分了,
傳送延遲訊息來不斷改變圓的大小以及透明度。執行一下程式碼看是否能夠出現動畫的效果。
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { //改變半徑大小,並且半徑一直加上5 radius+=5; paint.setStrokeWidth(radius /3); //改變透明度 int alpha = paint.getAlpha(); alpha-=5;//透明度不斷減去5 //設定透明度 paint.setAlpha(alpha); //呼叫onDraw方法 invalidate(); } };
4、重寫onTouchEvent方法。然後把onDraw()方法中的canvas.drawCircle(100,100,radius,paint);裡面的100分別換成螢幕點選的x和y的座標canvas.drawCircle(downX,downY,radius,paint);
float downY; float downX; @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN://按下 downX = event.getX();//獲取按下時的x座標 downY = event.getY();//獲取按下時的y座標initView();//重新呼叫initView()方法,重新繪製圓
invalidate();//呼叫onDraw方法 break; case MotionEvent.ACTION_MOVE://移動 break; case MotionEvent.ACTION_UP://離開 break;} return true;} 好了這個小demo到此也就告一段落了。