1. 程式人生 > >安卓實現水波紋動畫效果

安卓實現水波紋動畫效果

步驟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(1
00,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到此也就告一段落了。