Android 맞춤형 물결 무늬

4051 단어
일단 효과를 볼게요.
효과를 실현하다
아날로그 물결무늬 효과: 화면을 클릭하면 원환이 나타나고 반경은 작은 것에서 큰 것, 투명도는 큰 것에서 작은 것(0은 투명)
생각을 실현하다
      1.사용자 정의 클래스 상속 View.
      2.각 도넛의 솔리드 클래스 Wave를 정의하고 도넛을 그리는 펜의 데이터를 초기화합니다.
      3.온터치 이벤트를 다시 쓰는 방법,down을 쓸 때 좌표점을 얻어 원환원심으로 만든다.
      4.handler 정보를 보내고 데이터를 수정하며 페이지를 새로 고칩니다.
      5.onDraw 방법을 다시 쓰고 원환을 그립니다.
1. 클래스 상속 뷰 사용자 정의
새 WaterWaveView2 클래스 상속 View

public class WaterWaveView2 extends View {

  //       
  private ArrayList 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();
  }

2. 솔리드 클래스 Wave 정의

/**
* 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  
 

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);
      }
    }
  }

총결산
이상은 안드로이드가 사용자 정의 물결 효과를 실현하는 모든 내용입니다. 어때요?실현된 효과가 괜찮겠지, 흥미 있는 친구들은 빨리 스스로 실천하기 시작하고, 이 문장이 모두의 학습과 업무에 도움이 되기를 바란다.

좋은 웹페이지 즐겨찾기