代码 实现按钮 seletor shape 选择器等

原创 2016年05月31日 17:31:28

package com.fangwf.shapeviewcode.util;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.graphics.drawable.StateListDrawable;
import android.os.Build;
import android.support.v4.content.ContextCompat;
import android.view.View;

import com.fangwf.shapeviewcode.widget.OvalDrawable;


public class ShapeBackgroundUtil {
    /**
     * 设置自定义颜色的drawable背景
     *
     * @param context
     * @param view
     * @param drawableId drawable-shape-背景
     * @param color      自定颜色
     */
    public static void setCustomColorShape(Context context, View view, int drawableId, String color) {
        setCustomColorShape(context, view, drawableId, Color.parseColor(color));
    }

    public static void setCustomColorShape(Context context, View view, int drawableId, int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(ContextCompat.getDrawable(context, drawableId));
        } else {
            view.setBackgroundDrawable(ContextCompat.getDrawable(context, drawableId));
        }
        GradientDrawable myGrad = (GradientDrawable) view.getBackground();
        myGrad.setColor(color);
    }

    /**
     * 设置自定义颜色的全圆角长形按钮背景
     *
     * @param view
     * @param color
     */
    public static void setCustomColorOvalBackground(View view, String color) {
        setCustomColorOvalBackground(view, Color.parseColor(color));
    }

    public static void setCustomColorOvalBackground(View view, int color) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(new OvalDrawable(color));
        } else {
            view.setBackgroundDrawable(new OvalDrawable(color));
        }
    }

    public static void setMultiColorOvalBackground(View view, String defaultColor, String activeColor) {
        setMultiColorOvalBackground(view, Color.parseColor(defaultColor), Color.parseColor(activeColor));
    }

    public static void setMultiColorOvalBackground(View view, int defaultColor, int activeColor) {
        StateListDrawable drawable = new StateListDrawable();
        Drawable drawable1 = new OvalDrawable(defaultColor);
        Drawable drawable2 = new OvalDrawable(activeColor);
        drawable.addState(new int[]{-android.R.attr.state_enabled}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_selected}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_active}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_checked}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_pressed}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_focused}, drawable2);
        drawable.addState(new int[]{}, drawable1);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(drawable);
        } else {
            view.setBackgroundDrawable(drawable);
        }
    }

    public static void setMultiColorBackground(Context context, View view, int drawableId, String defaultColor, String activeColor) {
        setMultiColorBackground(context, view, drawableId, Color.parseColor(defaultColor), Color.parseColor(activeColor));
    }

    public static void setMultiColorBackground(Context context, View view, int drawableId, int defaultColor, int activeColor) {
        StateListDrawable drawable = new StateListDrawable();
        GradientDrawable drawable1 = (GradientDrawable) ContextCompat.getDrawable(context, drawableId);
        GradientDrawable drawable2 = (GradientDrawable) ContextCompat.getDrawable(context, drawableId);
        drawable1.setColor(defaultColor);
        drawable2.setColor(activeColor);
//        drawable.addState(new int[]{android.R.attr.state_enabled}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_active}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_checked}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_pressed}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_selected}, drawable2);
        drawable.addState(new int[]{android.R.attr.state_focused}, drawable2);
        drawable.addState(new int[]{}, drawable1);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            view.setBackground(drawable);
        } else {
            view.setBackgroundDrawable(drawable);
        }
    }
}
package com.fangwf.shapeviewcode.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

import com.fangwf.shapeviewcode.R;
import com.fangwf.shapeviewcode.util.ShapeBackgroundUtil;


public class MainActivity extends Activity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ShapeBackgroundUtil.setMultiColorBackground(this, findViewById(R.id.button), R.drawable.shape_radius, "#e26119", "#df3816");
        ShapeBackgroundUtil.setMultiColorOvalBackground(findViewById(R.id.button2), "#ea517d", "#df3816");
        ShapeBackgroundUtil.setCustomColorOvalBackground(findViewById(R.id.button3), "#0d3fb3");
        ShapeBackgroundUtil.setCustomColorShape(this,findViewById(R.id.button4),R.drawable.shape_radius,"#e26119");

        findViewById(R.id.button).setOnClickListener(this);
        findViewById(R.id.button2).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {

    }
}

R.drawable.shape_radius
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <corners
        android:topLeftRadius="5dp"
        android:topRightRadius="5dp"
        android:bottomLeftRadius="5dp"
        android:bottomRightRadius="5dp"/>

    <solid
        android:color="#00000000"/>

</shape>  


package com.fangwf.shapeviewcode.widget;

import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;


public class OvalDrawable extends Drawable {
    public OvalDrawable() {
        this(0);
    }

    public OvalDrawable(int color) {
        mPaint.setColor(color);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setAntiAlias(true);
    }

    private boolean mRebuildShader = true;
    private final Paint mPaint = new Paint();
    private RectF leftRect, rightRect, cententRect;

    @Override
    public void draw(Canvas canvas) {
        if (mRebuildShader) {
            Rect bounds = getBounds();
            int r = bounds.bottom - bounds.top;
            leftRect = new RectF(bounds.left, bounds.top, bounds.left + r, bounds.top + r);
            rightRect = new RectF(bounds.right - r, bounds.top, bounds.right, bounds.top + r);
            cententRect = new RectF(bounds.left + r / 2, bounds.top, bounds.right - r / 2, bounds.bottom);
        }

        canvas.drawArc(leftRect, 90, 180, true, mPaint);
        canvas.drawRect(cententRect, mPaint);
        canvas.drawArc(rightRect, -90, 180, true, mPaint);
    }

    @Override
    protected void onBoundsChange(Rect bounds) {
        super.onBoundsChange(bounds);
        mRebuildShader = true;
    }

    public void setColor(int color) {
        mPaint.setColor(color);
    }

    public int getColor() {
        return mPaint.getColor();
    }

    @Override
    public void setAlpha(int alpha) {
        mPaint.setAlpha(alpha);
    }

    @Override
    public int getAlpha() {
        return mPaint.getAlpha();
    }

    @Override
    public void setColorFilter(ColorFilter cf) {
    }

    @Override
    public int getOpacity() {
        return 0;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Android的selector,Button按钮背景选择器

Android的selector,Button按钮背景选择器         android:layout_width="match_parent"         android:layout...
  • Jason_996
  • Jason_996
  • 2015年09月08日 18:41
  • 810

shape与seletor状态选择器

第一种状态     android:shape="rectangle" >                                              ...
  • Andybfw
  • Andybfw
  • 2017年03月18日 18:38
  • 157

android 状态选择器和shape的运用

android 状态选择器和shape的运用 在Android开发中,会去用到状态选择器和Shape这个东东去实现一些特殊的功能,比如按钮按下状态,按钮的背景颜色渐变,图形变形化等。 一、状态...
  • Deaht_Huimie
  • Deaht_Huimie
  • 2016年11月26日 18:52
  • 410

Android Selector的实现原理

android的selector对于android开发者而言再熟悉不过了,只要定义一个drawable目录下定义一个selector的xml文件,在布局文件中引用这个xml文件或者在代码中setBac...
  • wangxingwu_314
  • wangxingwu_314
  • 2012年11月09日 14:52
  • 2291

通过选择器selector给TextView,Button设置字体颜色和背景颜色

背景颜色通过结合shape实现
  • qq_27853161
  • qq_27853161
  • 2017年03月14日 15:28
  • 1113

android 利用代码实现圆角button(shape)

最近项目需求需要利用网络获取颜色,而不可以使用xml文件来实现shape ,也就是圆角矩形,搜集了一些资料,发现了RoundRectShape类,可以实现我的需要,nice。 其实他的用法也非常简单,...
  • sinat_30747197
  • sinat_30747197
  • 2017年03月22日 20:08
  • 802

Android:背景选择器selector及shape详解

这周是学校的创新创业周,一周没有课,正好可以有时间把Android基础知识都拿出来整理下。 刚学Android的时候,所有的界面都很丑,后来学了背景选择器,就大大改善下这种情况……恩,其实写起来...
  • zheng_weichao
  • zheng_weichao
  • 2017年05月15日 12:25
  • 573

Android shape 和Seletor

shape用于设定形状,可以在selector,layout等里面使用,有6个子标签,各属性如下: xml version="1.0" encoding="utf-8"?> shape xm...
  • ZHENZHEN9310
  • ZHENZHEN9310
  • 2016年04月13日 18:00
  • 165

用CSS伪选择器实现脚本控制的按钮功能

记得之前看到一句话“为了性能考虑,能用CSS实现的特效和功能,尽量不要使用JavaScript脚本”,因为JS的特效基本都是针对DOM节点的操作,只要DOM发生变化,就肯定会引起回流,回流是比较消耗资...
  • Picking_up_stones
  • Picking_up_stones
  • 2017年03月18日 15:12
  • 580

android-代码实现XML中的shape的效果

android-代码实现XML中的shape的效果
  • centralperk
  • centralperk
  • 2016年02月25日 09:29
  • 1133
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:代码 实现按钮 seletor shape 选择器等
举报原因:
原因补充:

(最多只允许输入30个字)