안 드 로 이 드 사용자 정의 화려 한 물결 효과 구현

4307 단어 android물결 무늬
일단 효 과 를 볼 게 요.

실현 효과
아 날로 그 물결 무늬 의 효과:화면 을 클릭 하면 링 이 나타 나 고 반지름 은 작은 것 에서 큰 것 으로 투명 도 는 큰 것 에서 작은 것 으로(0 은 투명)
사고의 방향 을 실현 하 다.
      1.사용자 정의 클래스 계승 View.
      2.각 링 의 실체 클래스 웨 이브 를 정의 하고 링 을 그 리 는 화필 의 데 이 터 를 초기 화 합 니 다.
      3.onTouchEvent 방법 을 다시 쓰 고 down 시 좌표 점 을 얻어 링 원심 으로 한다.
      4.handler 정 보 를 보 내 고 데 이 터 를 수정 하여 페이지 를 새로 고침 합 니 다.
      5.onDraw 방법 을 다시 쓰 고 링 을 그립 니 다.
1.사용자 정의 클래스 계승 보기
새 워 터 웨 이브 뷰 2 클래스 계승 보기

public class WaterWaveView2 extends View {

  //       
  private ArrayList<Wave> mList;

  //    
  private Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
      invalidate();//    ,   onDraw  
    }
  };

  public WaterWaveView2(Context context) {
    this(context, null);
  }

  public WaterWaveView2(Context context, AttributeSet attrs) {
    super(context, attrs);
    mList = new ArrayList<Wave>();
  }
2.실체 클래스 웨 이브 정의

/**
* Created by HongJay on 2016/8/30.
*  wave          
*/
public class Wave {
  public float x;//  x  
  public float y;//  y  
  public Paint paint; //     
  public float width; //    
  public int radius; //    
  public int ranNum;//   
  public int[] randomColor={Color.BLUE,Color.CYAN,
      Color.GREEN,Color.MAGENTA,Color.RED,Color.YELLOW};

  public Wave(float x, float y) {
    this.x = x;
    this.y = y;
    initData();
  }
  /**
   *      ,             
   */
  private void initData() {
    paint=new Paint();//               
    paint.setAntiAlias(true);//     
    ranNum=(int) (Math.random()*6);//[0,5]    
    paint.setColor(randomColor[ranNum]);//       
    paint.setStyle(Paint.Style.STROKE);//  
    paint.setStrokeWidth(width);//      
    paint.setAlpha(255);//      (0-255),0     
    radius=0;//   
    width=0;
  }
}
3.onTouchEvent 재 작성 방법
원심 을 획득 하고 집합 중의 투명도 가 0 인 링 을 삭제 하 며 handler 호출onDraw()방법 을 알려 줍 니 다.

public boolean onTouchEvent(MotionEvent event) {
    super.onTouchEvent(event);
    switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:

        float x = event.getX();
        float y = event.getY();
        deleteItem();
        Wave wave = new Wave(x, y);
        mList.add(wave);

        //    
        invalidate();
        break;

      case MotionEvent.ACTION_MOVE:
        float x1 = event.getX();
        float y1 = event.getY();
        deleteItem();
        Wave wave1 = new Wave(x1, y1);
        mList.add(wave1);

        invalidate();
        break;
    }
    //    
    return true;
  }
  //        0   
  private void deleteItem(){
    for (int i = 0; i <mList.size() ; i++) {
      if(mList.get(i).paint.getAlpha()==0){
        mList.remove(i);
      }
    }
  }
}
4.onDraw()방법 을 다시 쓰 고 링 을 반복 해서 그립 니 다.

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //            
    if (mList.size() > 0) {

      //             
      for (Wave wave : mList) {
        canvas.drawCircle(wave.x, wave.y, wave.radius, wave.paint);
        wave.radius += 3;
        //          
        int alpha = wave.paint.getAlpha();
        if (alpha < 80) {
          alpha = 0;
        } else {
          alpha -= 3;
        }

        //          
        wave.paint.setStrokeWidth(wave.radius / 8);
        wave.paint.setAlpha(alpha);

        //      
        mHandler.sendEmptyMessageDelayed(1, 100);
      }
    }
  }
총결산
이상 은 안 드 로 이 드 가 사용자 정의 물결 무늬 효 과 를 실현 하 는 모든 내용 입 니 다.어 떻 습 니까?실현 효과 가 좋 죠?관심 있 는 친구 들 은 빨리 스스로 실천 하 세 요.이 글 이 여러분 의 학습 과 업무 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기