• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效

Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了咻特效音,android特效大全,android 特效,android 动画特效,android ui特效等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效


Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View


先来看看这个效果

这里写图片描述

这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术不行,也太懒了
PS:这个view也是我模仿了人家的效果,参考了人家的思路写的,不是纯手撸,罪过罪过,网上应该也能找到很多这样的效果,我只是加入了一些自己的需求在里面

我么新建一个工程——Whew

RoundImageView

这个之前讲过,网上 的粒子,把头像变成圆形的,这里就不多说了,直接撸代码吧!

package com.lgl.whew;

/**
 * 圆形头像
 * Created by LGL on 2016/1/12.
 */

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * 圆形ImageView,可设置最多两个宽度不同且颜色不同的圆形边框。
 *
 * 设置颜色在xml布局文件中由自定义属性配置参数指定
 */

public class RoundImageView extends ImageView {

    private int mBorderThickness = 0;

    private Context mContext;

    private int defaultColor = 0xFFFFFFFF;

    // 如果只有其中一个有值,则只画一个圆形边框

    private int mBorderOutsideColor = 0;

    private int mBorderInsideColor = 0;

    // 控件默认长、宽

    private int defaultWidth = 0;

    private int defaultHeight = 0;

    public RoundImageView(Context context) {

        super(context);

        mContext = context;

    }

    public RoundImageView(Context context, AttributeSet attrs) {

        super(context, attrs);

        mContext = context;

        setCustomAttributes(attrs);

    }

    public RoundImageView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

        mContext = context;

        setCustomAttributes(attrs);

    }

    private void setCustomAttributes(AttributeSet attrs) {

        TypedArray a = mContext.obtainStyledAttributes(attrs,
                R.styleable.roundedimageview);

        mBorderThickness = a.getDimensionPixelSize(
                R.styleable.roundedimageview_border_thickness, 0);

        mBorderOutsideColor = a
                .getColor(R.styleable.roundedimageview_border_outside_color,
                        defaultColor);

        mBorderInsideColor = a.getColor(
                R.styleable.roundedimageview_border_inside_color, defaultColor);

    }

    @Override
    protected void onDraw(Canvas canvas) {

        Drawable drawable = getDrawable();

        if (drawable == null) {

            return;

        }

        if (getWidth() == 0 || getHeight() == 0) {

            return;

        }

        this.measure(0, 0);

        if (drawable.getClass() == NinePatchDrawable.class)

            return;

        Bitmap b = ((BitmapDrawable) drawable).getBitmap();

        Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true);

        if (defaultWidth == 0) {

            defaultWidth = getWidth();

        }

        if (defaultHeight == 0) {

            defaultHeight = getHeight();

        }

        int radius = 0;

        if (mBorderInsideColor != defaultColor
                && mBorderOutsideColor != defaultColor) {// 定义画两个边框,分别为外圆边框和内圆边框

            radius = (defaultWidth < defaultHeight ? defaultWidth
                    : defaultHeight) / 2 - 2 * mBorderThickness;

            // 画内圆

            drawCircleBorder(canvas, radius + mBorderThickness / 2,
                    mBorderInsideColor);

            // 画外圆

            drawCircleBorder(canvas, radius + mBorderThickness
                    + mBorderThickness / 2, mBorderOutsideColor);

        } else if (mBorderInsideColor != defaultColor
                && mBorderOutsideColor == defaultColor) {// 定义画一个边框

            radius = (defaultWidth < defaultHeight ? defaultWidth
                    : defaultHeight) / 2 - mBorderThickness;

            drawCircleBorder(canvas, radius + mBorderThickness / 2,
                    mBorderInsideColor);

        } else if (mBorderInsideColor == defaultColor
                && mBorderOutsideColor != defaultColor) {// 定义画一个边框

            radius = (defaultWidth < defaultHeight ? defaultWidth
                    : defaultHeight) / 2 - mBorderThickness;

            drawCircleBorder(canvas, radius + mBorderThickness / 2,
                    mBorderOutsideColor);

        } else {// 没有边框

            radius = (defaultWidth < defaultHeight ? defaultWidth
                    : defaultHeight) / 2;

        }

        Bitmap roundBitmap = getCroppedRoundBitmap(bitmap, radius);

        canvas.drawBitmap(roundBitmap, defaultWidth / 2 - radius, defaultHeight
                / 2 - radius, null);

    }

    /**
     * 获取裁剪后的圆形图片
     */

    public Bitmap getCroppedRoundBitmap(Bitmap bmp, int radius) {

        Bitmap scaledSrcBmp;

        int diameter = radius * 2;

        // 为了防止宽高不相等,造成圆形图片变形,因此截取长方形中处于中间位置最大的正方形图片

        int bmpWidth = bmp.getWidth();

        int bmpHeight = bmp.getHeight();

        int squareWidth = 0, squareHeight = 0;

        int x = 0, y = 0;

        Bitmap squareBitmap;

        if (bmpHeight > bmpWidth) {// 高大于宽

            squareWidth = squareHeight = bmpWidth;

            x = 0;

            y = (bmpHeight - bmpWidth) / 2;

            // 截取正方形图片

            squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth,
                    squareHeight);

        } else if (bmpHeight < bmpWidth) {// 宽大于高

            squareWidth = squareHeight = bmpHeight;

            x = (bmpWidth - bmpHeight) / 2;

            y = 0;

            squareBitmap = Bitmap.createBitmap(bmp, x, y, squareWidth,
                    squareHeight);

        } else {

            squareBitmap = bmp;

        }

        if (squareBitmap.getWidth() != diameter
                || squareBitmap.getHeight() != diameter) {

            scaledSrcBmp = Bitmap.createScaledBitmap(squareBitmap, diameter,
                    diameter, true);

        } else {

            scaledSrcBmp = squareBitmap;

        }

        Bitmap output = Bitmap.createBitmap(scaledSrcBmp.getWidth(),

        scaledSrcBmp.getHeight(),

        Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(output);

        Paint paint = new Paint();

        Rect rect = new Rect(0, 0, scaledSrcBmp.getWidth(),
                scaledSrcBmp.getHeight());

        paint.setAntiAlias(true);

        paint.setFilterBitmap(true);

        paint.setDither(true);

        canvas.drawARGB(0, 0, 0, 0);

        canvas.drawCircle(scaledSrcBmp.getWidth() / 2,

        scaledSrcBmp.getHeight() / 2,

        scaledSrcBmp.getWidth() / 2,

        paint);

        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));

        canvas.drawBitmap(scaledSrcBmp, rect, rect, paint);

        bmp = null;

        squareBitmap = null;

        scaledSrcBmp = null;

        return output;

    }

    /**
     * 边缘画圆
     */

    private void drawCircleBorder(Canvas canvas, int radius, int color) {

        Paint paint = new Paint();

        /* 去锯齿 */

        paint.setAntiAlias(true);

        paint.setFilterBitmap(true);

        paint.setDither(true);

        paint.setColor(color);



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效

相关文章

  • 2017-05-26UI-初识君面之理论篇,ui-初识理论篇
  • 2017-05-26手机安全卫士——软件管理-用户程序和系统程序,安全卫士系统程序
  • 2017-05-26Android 交错 GridView,androidgridview
  • 2017-05-26WeakReference在Handler中的应用,weakhandler
  • 2017-05-26android 获取GPS定位,androidgps定位
  • 2017-05-26Android 手机卫士11--窗体弹出PopupWindow,11--popupwindow
  • 2017-05-26Android特效专辑(十二)——如何仿支付宝咻一咻功能实现波纹扩散特效
  • 2017-05-26xUtils3,xutils3github
  • 2017-05-26编译android源码4---ubuntu下载Android源代码
  • 2017-05-26【lushengduan】01、搭建安卓App开发环境 编写程序HelloWorld,lushengduan安卓

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android音频开发之基础知识介绍
    • Android开发技术周报 Issue#68
    • TODO的使用以及自定义
    • 【Bugly 技术干货】Android开发必备知识:为什么说Kotlin值得一试,buglykotlin
    • 关于Android滑动冲突的解决方法(二)
    • Atitit.android播放smb&#160;网络邻居视频文件解决方案,atitit.androidsmb
    • 安卓开发学习经历2--《第一行代码》coolweather项目SQL语句同一个“陷阱”掉两次 注意转义字符等特殊字符正确书写 关于Id字段自增加体会,coolweather
    • Android下拉刷新上拉加载更多的扩展ListView
    • Winform突然不响应KeyEvent了
    • android 多线程断点续传视频列表

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有