博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android - 点击可以转动的自定义右下角浮动FABImageButton按钮
阅读量:5285 次
发布时间:2019-06-14

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

因为项目需要一个右下角浮动的圆形的按钮,顺便增加了一个用户友好体验,点击按钮后开始转动,再次点击后停止转动,如图:

实现方式:

首先添加一个FABImageButton.java的类文件

package com.example.test;import android.annotation.SuppressLint;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Shader;import android.graphics.drawable.Drawable;import android.graphics.drawable.LayerDrawable;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.StateListDrawable;import android.graphics.drawable.shapes.OvalShape;import android.util.AttributeSet;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.view.animation.LinearInterpolator;import android.widget.ImageButton;public class FABImageButton extends ImageButton{    private Context content;    private Animation operatingAnim;    private boolean isAnimPlay = false;    private int bgColor;    private int bgColorPressed;        public FABImageButton(Context context) {		super(context);		this.content = context;		init(null);	}    public FABImageButton(Context context, AttributeSet attrs) {		super(context, attrs);		this.content = context;		init(attrs);	}    public FABImageButton(Context context, AttributeSet attrs, int defStyleAttr) {		super(context, attrs, defStyleAttr);		this.content = context;		init(attrs);	}    @SuppressLint("NewApi")     public FABImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {    	super(context, attrs, defStyleAttr, defStyleRes);        this.content = context;        init(attrs);    }    /**     * 播放/暂停旋转动画     * */    public void PlayAnim(){    	if(!isAnimPlay){    		startAnimation(operatingAnim);		isAnimPlay = true;    	}else{    		clearAnimation();		isAnimPlay = false;    	}    }        private Drawable createButton(int color) {        OvalShape oShape = new OvalShape();        ShapeDrawable sd = new ShapeDrawable(oShape);        setWillNotDraw(false);        sd.getPaint().setColor(color);        ShapeDrawable sd1 = new ShapeDrawable(oShape);        sd1.setShaderFactory(new ShapeDrawable.ShaderFactory() {            @Override            public Shader resize(int width, int height) {                LinearGradient lg = new LinearGradient(0,0,0, height,                        new int[] {                                Color.WHITE,                                Color.GRAY,                                Color.DKGRAY,                                Color.BLACK                        }, null, Shader.TileMode.REPEAT);                return lg;            }        });        LayerDrawable ld = new LayerDrawable(new Drawable[] { sd1, sd });        ld.setLayerInset(0, 0, 0, 0, 0);        return ld;    }        @SuppressLint("NewApi")     private void init(AttributeSet attrSet) {    	//加载动画    	operatingAnim = AnimationUtils.loadAnimation(content, R.anim.tip);		LinearInterpolator lin = new LinearInterpolator();		operatingAnim.setInterpolator(lin);    	        Resources.Theme theme = content.getTheme();        TypedArray arr = theme.obtainStyledAttributes(attrSet, R.styleable.FAB, 0, 0);        try {            setBgColor(arr.getColor(R.styleable.FAB_bg_color, Color.BLACK));            setBgColorPressed(arr.getColor(R.styleable.FAB_bg_color_pressed, Color.GRAY));            StateListDrawable sld = new StateListDrawable();            sld.addState(new int[] {android.R.attr.state_pressed}, createButton(bgColorPressed));            sld.addState(new int[] {}, createButton(bgColor));            setBackground(sld);        }        catch(Throwable t) {}        finally {             arr.recycle();        }    }    public void setBgColor(int color) {        this.bgColor = color;    }    public void setBgColorPressed(int color) {        this.bgColorPressed = color;    }}

2. values文件夹下面定义个名称为stylable.xml的资源文件

 

3.创建一个旋转的动画效果res文件夹下面建立一个anim文件夹,在文件夹下面建立一个名称为tip.xml的xml文件

 

4.layout里面添加FABImageButton

 

5.MainActivity文件

public class MainActivity extends Activity {	FABImageButton fabbtn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);                ListView lv = (ListView) findViewById(R.id.lv1);        String[] data = new String[100];        for (int i=0; i < data.length; i++)            data[i] = "浮动按钮" + i;        ArrayAdapter
aAdpt = new ArrayAdapter
(this, android.R.layout.simple_list_item_1, data); lv.setAdapter(aAdpt); fabbtn = (FABImageButton) findViewById(R.id.fabbtn); fabbtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { fabbtn.PlayAnim(); } }); }}

  

结束...

 

转载于:https://www.cnblogs.com/brantliu/p/4878882.html

你可能感兴趣的文章
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>
瞬间的永恒
查看>>
2019-8-5 考试总结
查看>>
JS中实现字符串和数组的相互转化
查看>>
web service和ejb的区别
查看>>
Windows Azure Cloud Service (29) 在Windows Azure发送邮件(下)
查看>>
微信上传素材返回 '{"errcode":41005,"errmsg":"media data missing"}',php5.6返回
查看>>
div或者p标签单行和多行超出显示省略号
查看>>
Elasticsearch 滚动重启 必读
查看>>