博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 阴影,圆形的Button
阅读量:5759 次
发布时间:2019-06-18

本文共 3830 字,大约阅读时间需要 12 分钟。

MainActivity.java

package com.kale.gridlayout;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.widget.Button;public class MainActivity extends Activity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				Button bt = (Button)findViewById(R.id.button_id);		Bitmap bitmap = CircleManager.getCircleBitmap(this, R.drawable.kale);		bt.setBackgroundDrawable(new BitmapDrawable(bitmap));	}	}
CircleManager.java

package com.kale.gridlayout;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.PorterDuffXfermode;import android.graphics.Rect;import android.graphics.RectF;import android.graphics.Bitmap.Config;import android.graphics.PorterDuff.Mode;public class CircleManager {	/**	 * 转换图片成圆形	 * Bitmap bitmap = CircleManager.getCircleBitmap(this, R.drawable.kale);	 * 	 *  ImageView ivImageView = (ImageView) findViewById(R.id.imageView1);		ivImageView.setImageBitmap(bmBitmap);	 * 	Button bt = (Button)findViewById(R.id.button_id);		bt.setBackgroundDrawable(new BitmapDrawable(bitmap));	 * @param bitmap	 * 传入Bitmap对象	 * @return	 */	public static Bitmap getCircleBitmap(Context context,int resId) {		Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resId);		int width = bitmap.getWidth();		int height = bitmap.getHeight();		float roundPx;		float left, top, right, bottom, dst_left, dst_top, dst_right, dst_bottom;		if (width <= height) {			roundPx = width / 2;			left = 0;			top = 0;			right = width;			bottom = width;			height = width;			dst_left = 0;			dst_top = 0;			dst_right = width;			dst_bottom = width;		} else {			roundPx = height / 2;			float clip = (width - height) / 2;			left = clip;			right = width - clip;			top = 0;			bottom = height;			width = height;			dst_left = 0;			dst_top = 0;			dst_right = height;			dst_bottom = height;		}		Bitmap output = Bitmap.createBitmap(width, height, Config.ARGB_8888);		Canvas canvas = new Canvas(output);		final Paint paint = new Paint();		final Rect src = new Rect((int) left, (int) top, (int) right, (int) bottom);		final Rect dst = new Rect((int) dst_left, (int) dst_top, (int) dst_right, (int) dst_bottom);		final RectF rectF = new RectF(dst);		paint.setAntiAlias(true);// 设置画笔无锯齿		canvas.drawARGB(0, 0, 0, 0); // 填充整个Canvas		// 以下有两种方法画圆,drawRounRect和drawCircle		canvas.drawRoundRect(rectF, roundPx, roundPx, paint);// 画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。		// canvas.drawCircle(roundPx, roundPx, roundPx, paint);		paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));// 设置两张图片相交时的模式,参考http://trylovecatch.iteye.com/blog/1189452		canvas.drawBitmap(bitmap, src, dst, paint); // 以Mode.SRC_IN模式合并bitmap和已经draw了的Circle		return output;	}}

circle.xml
    
        
            
        
    
    
        
            
        
    
     
    
        
            
        
    
     
    
        
            
        
    
    
        
            
        
    
    
        
            
        
    
    
        
            
        
    
     
    
        
            
            
        
    
 

xml

你可能感兴趣的文章
JSP第五篇【JSTL的介绍、core标签库、fn方法库、fmt标签库】
查看>>
Vue系列(四):模块化开发、Elment UI、自定义全局组件(插件)、Vuex
查看>>
【348天】每日项目总结系列086(2018.01.19)
查看>>
extjs-mvc结构实践(五):实现用户管理的增删改查
查看>>
【JS基础】初谈JS现有的数据类型
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
Microsoft发布了Azure Bot Service和LUIS的GA版
查看>>
Google发布Puppeteer 1.0
查看>>
何时该用无服务器,何时该用Kubernetes?
查看>>
窗口进度条及其高级使用
查看>>
实录分享&视频 | 微软Visual Studio Code是这样支持Docker的
查看>>
放弃OpenStack?恐怕还不到时候
查看>>
苏宁精准营销之生成人群包的演进
查看>>
.NET开源现状
查看>>
Dave Farley:持续交付的基本原理
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
【资料搬迁】windows 下更改mysql的root密码
查看>>
openfiler简单使用
查看>>