android 自定义view 类似loadding从下往上加载的动画
16lz
2021-01-23
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; }}
更多相关文章
- android 给图片加水印
- Android: 利用Bimap,canvas处理图片(画直线)
- 【Android】ImageMap,图片地图
- Android Stdio实现点击按钮出现图片
- android图片异步加载 列表
- android 下载文件图片圆形进度条
- android:ImageView,访问网上图片并显示出来
- Android -- 图片画画板(canvas、paint、bitmap)
- Android 自定义Drawable 实现圆角矩形和圆形图片