android 自定义view 类似loadding从下往上加载的动画
2016-11-10 09:22
399 查看
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 自定义View 模仿豆瓣App加载中Loading(也类似支付宝AppLoading)
- android控件使用---recycleview自定义上拉加载,和加载多个布局及加入动画
- [置顶] Android 自定义view之 Xfermode 制作动态文字加载动画
- Android自定义view-高仿小米视频加载动画效果
- Android自定义view实现阻尼效果的加载动画
- Android 自定义SurfaceView实现加载GIF动画
- android学习-----自定义View 加载动画
- android自定义view之加载动画ColorBall
- Android自定义加载loading view动画组件
- android自定义View基础系列一(模仿365日历PC版加载动画)
- Android自定义View实现loading动画加载效果
- 【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式
- Android自定义view利用Xfermode实现动态文字加载动画
- android自定义view之加载动画ColorBall
- Android上拉刷新下拉加载XRefreshView集成以及自定义GIF动画
- android自定义View---6个小圆组成的加载动画
- Android自定义View--加载动画
- Android自定义类似ProgressDialog效果加载动画
- Android 自定义View修炼-自定义加载进度动画XCLoadingImageView
- Android自定义View二(加载进度动画)