zoukankan      html  css  js  c++  java
  • PorterDuffXfermodeMode.DST_IN

    package com.loaderman.customviewdemo.view;
    
    import android.animation.ValueAnimator;
    import android.content.Context;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.PorterDuff;
    import android.graphics.PorterDuffXfermode;
    import android.graphics.Rect;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.animation.LinearInterpolator;
    
    import com.loaderman.customviewdemo.R;
    
    
    public class IrregularWaveView extends View {
    
        private Paint mPaint;
        private int mItemWaveLength = 0;
        private int dx=0;
    
        private Bitmap BmpSRC,BmpDST;
    
        public IrregularWaveView(Context context, AttributeSet attrs) {
            super(context, attrs);
            mPaint = new Paint();
    
            BmpDST = BitmapFactory.decodeResource(getResources(), R.drawable.wave_bg, null);
            BmpSRC = BitmapFactory.decodeResource(getResources(),R.drawable.circle_shape,null);
            mItemWaveLength = BmpDST.getWidth();
    
            startAnim();
        }
        @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    
        canvas.drawColor(Color.WHITE);
    
        //先画上圆形
        canvas.drawBitmap(BmpSRC,0,0,mPaint);
        //再画上结果
        int layerId = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
        canvas.drawBitmap(BmpDST,new Rect(dx,0,dx+BmpSRC.getWidth(),BmpSRC.getHeight()),new Rect(0,0,BmpSRC.getWidth(),BmpSRC.getHeight()),mPaint);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
        canvas.drawBitmap(BmpSRC,0,0,mPaint);
        mPaint.setXfermode(null);
        canvas.restoreToCount(layerId);
    }
    
    
    public void startAnim(){
        ValueAnimator animator = ValueAnimator.ofInt(0,mItemWaveLength);
        animator.setDuration(4000);
        animator.setRepeatCount(ValueAnimator.INFINITE);
        animator.setInterpolator(new LinearInterpolator());
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            public void onAnimationUpdate(ValueAnimator animation) {
                dx = (Integer)animation.getAnimatedValue();
                postInvalidate();
            }
        });
        animator.start();
    }
    }
      <com.loaderman.customviewdemo.view.IrregularWaveView
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

    效果:

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/loaderman/p/10215191.html
Copyright © 2011-2022 走看看