package com.nbhero.DIYview;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Matrix;import android.graphics.Paint;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.os.Build;import android.support.annotation.RequiresApi;import android.util.AttributeSet;import android.util.Log;import android.view.View;import com.nbhero.flower.R;import com.nbhero.util.tool;/** * Created by zhenglingzhong on 2016/11/8. */public class AboutGas extends View{    //view    private  int viewheight;    private  int viewwidth;    private  Paint paintbit;    private  Bitmap mybit;    private  int bitWidth;    private  int bitHeight;    private PorterDuffXfermode mXfermode;    private Rect mSrcRect, mDestRect,mDynamicRect;    private  Paint mBitPaint;    private  float move = 0.5f;    public AboutGas(Context context) {        this(context,null);    }    public AboutGas(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public AboutGas(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        viewheight = View.MeasureSpec.getSize(heightMeasureSpec);        viewwidth = View.MeasureSpec.getSize(widthMeasureSpec);        if (viewheight > viewwidth){            viewheight = viewwidth;        }        setMeasuredDimension(viewwidth, viewheight);        init();    }    private  void init(){        mXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN);        //画笔        paintbit = new Paint(Paint.ANTI_ALIAS_FLAG);        paintbit.setFilterBitmap(true);        paintbit.setDither(true);        paintbit.setAntiAlias(true);        paintbit.setColor(Color.YELLOW);        //图像对象        mybit = ((BitmapDrawable) getResources().getDrawable(R.drawable.gastudio))                .getBitmap();        bitWidth = mybit.getWidth();        bitHeight = mybit.getHeight();        Log.e("zlz","width" + bitWidth);        Log.e("zlz","bitHeight" + bitHeight);        int rawHeight = bitHeight;        int rawWidth = bitWidth;        // 设定图片新的高宽        int newHeight = viewwidth;        // 计算缩放因子        float heightScale = ((float) newHeight) / rawHeight;        // 新建立矩阵        Matrix matrix = new Matrix();        matrix.postScale(heightScale, heightScale);        mybit = Bitmap.createBitmap(mybit, 0, 0, rawWidth,                rawHeight, matrix, true);        bitWidth = mybit.getWidth();        bitHeight = mybit.getHeight();        Log.e("zlz","width" + bitWidth);        Log.e("zlz","bitHeight" + bitHeight);        Log.e("zlz","viewidth" + viewwidth);        Log.e("zlz","viewheight" + viewheight);        mSrcRect = new Rect(0,0,bitWidth,bitHeight);        mDestRect = new Rect(bitHeight / 2 - bitWidth / 2,0,bitHeight / 2 - bitWidth / 2 + bitWidth,bitHeight);        mDynamicRect = new Rect(bitHeight / 2 - bitWidth / 2,bitHeight,bitHeight / 2 - bitWidth / 2 + bitWidth,bitHeight);    }    @Override    protected void onDraw(Canvas canvas) {        mBitPaint = new Paint();        mBitPaint.setColor(Color.YELLOW);        int saveLayerCount = canvas.saveLayer(0, 0, viewwidth, viewwidth, mBitPaint,                Canvas.ALL_SAVE_FLAG);        canvas.drawBitmap(mybit,mSrcRect,mDestRect,paintbit);        mBitPaint.setXfermode(mXfermode);        // 绘制源图形        canvas.drawRect(mDynamicRect, mBitPaint);        if(mDynamicRect.top >= (int)((1-move) * (float) bitHeight)){            Log.e("zlz","mDynamicRect.top " + mDynamicRect.top );            mDynamicRect.top -= 2;            postInvalidate();        }    }    public  void setGas(float gas){        this.move = gas;    }    private  Bitmap makeBit(){        //得到图片原始的高宽        int rawHeight = bitHeight;        int rawWidth = bitWidth;        // 设定图片新的高宽        int newHeight = viewwidth;        // 计算缩放因子        float heightScale = ((float) newHeight) / rawHeight;        // 新建立矩阵        Matrix matrix = new Matrix();        matrix.postScale(heightScale, heightScale);        // 设置图片的旋转角度        // matrix.postRotate(-30);        // 设置图片的倾斜        // matrix.postSkew(0.1f, 0.1f);        // 将图片大小压缩        // 压缩后图片的宽和高以及kB大小均会变化        Bitmap newBitmap = Bitmap.createBitmap(mybit, 0, 0, rawWidth,                rawHeight, matrix, true);        return  newBitmap;    }}

更多相关文章

  1. android 给图片加水印
  2. Android: 利用Bimap,canvas处理图片(画直线)
  3. 【Android】ImageMap,图片地图
  4. Android Stdio实现点击按钮出现图片
  5. android图片异步加载 列表
  6. android 下载文件图片圆形进度条
  7. android:ImageView,访问网上图片并显示出来
  8. Android -- 图片画画板(canvas、paint、bitmap)
  9. Android 自定义Drawable 实现圆角矩形和圆形图片

随机推荐

  1. 基于 Babel 的 npm 包的最小化设置 [每日
  2. 一文学懂 TypeScript 的类型 [每日前端夜
  3. 通过 Web 控制蓝牙设备:WebBluetooth入门
  4. 7个 Javascript 面试题及回答策略 [每日
  5. JavaScript 高阶函数快速入门 [每日前端
  6. 分享十张表的数据!大家一起玩!
  7. 2019年 Vue.js 报告中的亮点 [每日前端夜
  8. 用python重新定义【2019十大网络流行语】
  9. 用 Node.js 写一个多人游戏服务器引擎 [
  10. 三十天写三十个网站后,我学到的东西[每日