Android不同形状切换

android:绘制圆角矩形,椭圆形 一、前言:在我们工作中会有绘制不同圆角的按钮图形,具体该怎么做之前也只是了解个大概,今天看了一节课,听完老师讲的我自己又写了一遍,记录一下。以及两个形状xml:shape_oval_rose.xml。首先先创建一个DrawableShapeActivity。 阅读详情

Android不同形状切换

一、效果图

在这里插入图片描述

二、代码实现

2.1 java代码

package com.example.layoutdemo.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.IntDef;
import androidx.annotation.Nullable;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

public class ShapeView extends View {

    private Paint mPaint;
    private Path mPath;
    private static final int SQUARE = 1;
    private static final int CIRCLE = 2;
    private static final int TRIANGLE = 3;

    private int mType = SQUARE;
    @IntDef({SQUARE,CIRCLE,TRIANGLE})
    @Retention(RetentionPolicy.SOURCE)
    private @interface ShareType{

    }
    public void setType(@ShareType int type) {
        mType = type;
    }
    public ShapeView(Context context) {
        this(context,null);
    }

    public ShapeView(Context context, @Nullable AttributeSet attrs) {
        this(context,attrs,0);
    }

    public ShapeView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mPaint = new Paint();
        mPaint.setDither(true);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(10);
        mPaint.setStyle(Paint.Style.FILL);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int size = widthSize > heightSize?heightSize:widthSize;
        setMeasuredDimension(size,size);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        int center = getWidth()/2;
        switch (mType){
            case SQUARE:
                mPaint.setColor(Color.RED);
                canvas.drawRect(0,0,getWidth(),getHeight(),mPaint);
                break;
            case CIRCLE:
                mPaint.setColor(Color.BLUE);
                canvas.drawOval(0,0,getWidth(),getHeight(),mPaint);
                break;
            case TRIANGLE:
                mPaint.setColor(Color.BLACK);
                if (mPath == null) {
                    mPath = new Path();
                    mPath.moveTo(center,0);
                    mPath.lineTo(0, (float) (center * Math.sqrt(3)));
                    mPath.lineTo(getWidth(),(float) (center * Math.sqrt(3)));
                    mPath.close();
                }
                canvas.drawPath(mPath,mPaint);
                break;
        }

    }

    public synchronized void start() {
        if (mType == SQUARE) {
            mType = CIRCLE;
        } else if (mType == CIRCLE) {
            mType = TRIANGLE;
        } else {
            mType = SQUARE;
        }
        postInvalidate();
    }

}

2.2 控件使用

 <com.example.layoutdemo.widget.ShapeView
        android:id="@+id/shape_view"
        android:layout_margin="20dp"
        android:layout_width="200dp"
        android:layout_height="200dp"/>
  final ShapeView shape_view= findViewById(R.id.shape_view);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true) {
                    shape_view.start();
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();

三、源码下载地址

Android自定义View

Android UI(Button)详解 目录:    1.Button点击事件        1.1 xml中实现onClick属性(不常用)       1.2 创建匿名内部类             1.3 继承OnClickListener接口       1.4 内部类实现OnClickListener接口           2.Button基础样式设置       2.1 背景       2.2 按钮文字 阅读详情

相关推荐

Android实现两个Launcher动态相互切换

一般情况下,用户只能选择一个Launcher作为默认启动器,但有时候我们可能需要在不同的场景下切换不同的Launcher。通过设置应用的Intent过滤器和启动Intent的目标包名,我们可以达到切换不同Launcher的效果。希望本文对你理解和掌握这一技术有所帮助。为了实现两个Launcher之间的切换,我们需要在应用中提供一个入口来启动另外一个Launcher。通过分别设置启动的目标包名,我们可以实现从Launcher1切换到Launcher2,以及从Launcher2切换回Launcher1的功能。

ByteKnight的博客 913

android+六边形布局,android – 带六边形触摸区域的六角形按钮

好吧,事实证明这比我想象的要复杂得多.基本问题是最高的Z-ordered按钮总是获得触摸事件,但是即使它没有处理事件,也不会在较低的Z-order上传递它.要获得两个按钮来查看事件,需要解决方法.这是基本方法:1:在片段/活动中创建一个当前包含十六进制按钮的容器2:创建一个包含按钮的片段,以及所有这些按钮和另一个按钮,其中alpha = 03:添加一个getOverlay():返回alpha = ...

weixin_32949451的博客 269

android 11.0 12.0Settings中通过代码设置默认laucher动态切换

在11.0 12.0定制化开发中,对于设置默认Launcher功能,也是在产品开发中常有的功能,有客户需要提出进入launcher后,设置为默认laucher,而在系统自定义服务中,增加设置系统默认Launcher的接口,调用设置laucher的方法后重启进入设置的launcher功能aidl添加接口}2.LgyManagerService.java增加设置默认launcher的接口try {!!";try {} } }

安卓兼职framework和app工程师的博客 1589

Android实现更改形状代码分享

自定义类是为了实现圆形、圆角,椭圆等自定义图片View,在xml中使用的方法,可以参照下面的代码 xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schem...

chouguo4423的博客 422

CDH Hue连接Hbase报错TSocket read 0 bytes

问题描述 安装好CDH集群后,在Hue中查看HBase信息时,Hue界面报错如下: Api 错误:TSocket read 0 bytes Hue日志报错: exceptions_renderable ERROR Potential trace: [('/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/hue/apps/hbase/src/hbase/api.py', 46, 'query', 'return getattr(self

邢为栋 3492

把MinerU集成到Dify

本文介绍了如何将本地部署的MinerU与Dify平台进行集成。首先需要确保Dify和MinerU在Docker环境中正常运行,并通过配置虚拟网络实现互联。然后详细说明了在Dify平台安装MinerU插件的步骤,包括从插件市场搜索安装、配置连接参数等关键操作。特别强调了要等待MinerU容器完全启动(healthy状态)后再进行Dify配置,否则会出现连接错误。通过简单的URL指向和API密钥设置,用户即可实现Dify平台与本地MinerU算力网络的对接,为后续的AI应用开发提供基础支持。

lyxerlau的博客 313

Android图像处理—图像变换处理探究

Android图像处理—图像变换处理探究 此篇博客主要研究了通过各种方式来达到对图像形状变换的效果。 矩阵变换基础 图像的变换同样可以通过矩阵来实现。下面将介绍 平移变换、旋转变换 缩放变换以及错切变换四种变换方式。 1.平移变换 当我们要将一个点从x0,y0移动到x,y的时候,可以通过下图的矩阵变换来实现: 当如图的矩阵左乘原坐标矩阵后,就会得到一个平移到x,y的新坐标矩阵。 2.旋转变换 当...

N0tExpecterr0r的博客 393

工业机器人关节拆装流程_一文读懂模块化直驱电机及机器人关节模组

私信“干货”二字,即可领取138G伺服与机器人专属及电控资料!如果说芯片是智能行业最为重要的核心元件,那么电机几乎可以说是支撑了整个自动化和大工业生产以及现代社会最为重要的部件,全世界90%的能源是由电机发出来的,而70%是由电机消耗调的,电机可以说是整个人类社会能源循环的占有绝对地位的产品。普通伺服电机伺服电机其实已经算是电动机中比较高端的类型,特别是永磁同步类型的伺服电机,由于其启动快速,惯量...

weixin_32159771的博客 2155

android studio shape形状图形

android:text="圆角矩形">android:text="椭圆形">--指定形状轮廓的粗细与颜色-->--指定形状轮廓的粗细与颜色-->--指定形状四个圆角半径-->--指定形状内部颜色-->--指定形状内部颜色-->--指定形状椭圆-->//点击按钮,切换背景。3.页面切换背景图形。

weixin_42399500的博客 1737

别再对着数据手册画图了!用HFSS 2023 R2快速复现ESP-01的PCB天线(附模型文件)

本文详细介绍了使用HFSS 2023 R2逆向复现ESP-01 PCB天线的五个关键步骤,包括逆向工程准备、高效建模技巧、材料与边界设置、激励与求解配置以及结果分析与设计验证。通过参数化建模和智能边界检测,大幅提升仿真效率,适用于WIFI和蓝牙设备的射频设计优化。

weixin_30832143的博客 76

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4391

android_选择器(select)和Shape(形状)

选择器(select)当我们对一个控件,要对不同的事件,触发不同的背景.例如:我们需要对一个按钮,进行正常的状态下是一个图片,点击下去之后,又变化成另外一种图片.步骤: 1: 要在res文件夹下面,建立一个drawable文件,然后建立一个xml文件.在里面定义你需要记住的状态,并且引用相应的图片 2.在控件里面使用,一般使用android:background=”@drawable/selec

xdd_lmd的博客 4224

【AI智能体】Langchain 主流大模型调用与对话API使用详解

【AI大模型】Langchain 模型调用与对话API使用详解

congge_study的博客 408

Android 设置 TabLayout 切换时背景色

设置 TabLayout 选中和未选中时的背景色

LHBTM的博客 2004

Open3D 点云变换【2025最新版】

点云平移、旋转、缩放、欧式变换的python代码实现。博客长期更新,本文最近更新时间为:2025年1月16日。

点云侠的博客 37万+

线性代数 --- 置换矩阵 (Permutation matrix)

置换矩阵 - permutation matrix

松下J27录放机 3万+

QQ顶部消息与电话切换栏实现(UI美化)

QQ大家肯定以及一定用过吧,那么大家肯定注意过它顶部两个模块的切换是不是很有意思呢,今天带大家来模仿一下,话不多说,都是很基本的代码相信大家都能理解: 1. xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:

stay hungry stay foolish 1353

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓-水波纹

安卓-水波纹 在开发安卓音乐播放器时,点击音乐需要水波纹效果,所以对安卓点击产生水波纹进行了学习。 标签: ripple标签,对应一个rippledrawable,当它被设置为一个控件的background属性时,控件在被按下时(无论控件是否是按钮,这里的按下是指手指位置),即会显示水波效果。 没有边界的ripple <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.co

qq_45779316的博客 342

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android_自定义控件样式

Android控件样式自定义是用定义在drawable文件夹下的XML文件实现,在布局文件中通过设置控件的background属性达到效果。一、控件常见状态:在XML文件中用到了selector节点,selector可以理解为状态切换器,不同的状态下切换不同的样式,各种状态用Item节点表示,以下为一些常见的状态(注意:statelist中第一个匹配当前状态的item会被使用。因此,如果第一个it...

mmdev 142

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android实现ListView圆角效果

本文演示如何Android中实现ListView圆角效果。   无论是网站,还是APP,人们都爱看一些新颖的视图效果。直角看多了,就想看看圆角,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,特别是在iphone中几乎随处可见圆角设计,现在也开始出现很多圆角名片了。   现在就给大家实现一个圆角的ListView效果。 圆角的设计,我们并不追求到处都用,无处不用,

上帝派来的逗比 683

android ui画图工具,Android UI效果之绘图篇(一)

准备出一个UI效果的系列,算是对这段时间的一个总结,主要讲Android开发中的UI效果设计模块。初步分为一下几个篇幅:Android XML绘图(Shape、Layer、Selector)Android Canvas绘图(canvas、point、porterDuffXfermode、shader)Android 动画详解Android 自定义控件今天就当开胃菜,先讲讲最简单的xml绘图,相信这...

weixin_30383561的博客 285

Android selector控制TextView和Button按下效果

1、一个XML控制TextView按下和抬起颜色<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <color android:color="#48aed

YangStronger的博客 3016

android 界面动画效果图,Android UI 篇- 实现一个揭露动画

原标题:Android UI 篇- 实现一个揭露动画一、应用场景1、 先上效果图: 效果图 2、 应用场景分析:适用于 Activity 界面跳转适用于 View 的切换支持所有 View 布局的动画效果3、代码使用(非常简洁好用):在你需要做动画的布局上,套上RevealAnimationLayout 就可以了,支持套任何布局!!!android:id="@+id/animat_layout"a...

weixin_28989315的博客 318

Android中圆角列表ListView

只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。腾讯、字节跳动、阿里、百度等BAT大厂 2019-2021面试真题解析资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

2401_83692985的博客 95
上一篇: Android弧形步数进度
下一篇: Android自定义Rating Bar
libodev
博客等级 码龄14年 2粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值