带环形进度条的button

带环形进度条的button

今天有一个一起学习的同学找我帮忙,因为今天工作不是很忙,所以就帮助他把效果实现了下,废话不多说,效果图奉上。

效果图

简单说下思路:在了解需求后,因为缺少相应的切图,所以选择自己来配图,背景使用shape来绘制的,麦克风的切图实在阿里素材库下载的,环形进度条的效果是写了一个rotate来实现的,当然如果提供切图的画,可以使用RotateAnimation动画来实现,效果应该会更好。

背景的recordstyle.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid android:color="#27f20c"/>
    <size android:width="128dp" android:height="128dp"/>
</shape>

环形进度条progressbar.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%">

    <shape
        android:innerRadius="40dp"
        android:shape="ring"
        android:thickness="8dp"
        android:useLevel="false">

        <gradient
            android:angle="90"
            android:centerColor="#27f20c"
            android:centerY="0.50"
            android:endColor="#27f20c"
            android:startColor="#ffffff"
            android:type="sweep"
            android:useLevel="false"/>

    </shape>
</rotate>

这两个文件都放在drawable下。

再来看一下主布局文件activity_main.xml。里面的资源尽量还是使用引用资源文件的形式,因为着急码代码,所以这次有点偷懒了,但这不是一个好习惯。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.tom.progressdemo.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/app_name"/>

    <FrameLayout
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_marginTop="20dp"
        >
        <ImageButton
            android:id="@+id/record"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/recordsytle"
            android:src="@drawable/recorder"
            />
        <TextView
            android:id="@+id/pause"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:text="暂停"
            android:textColor="#ffffff"
            android:textSize="24sp"
            android:gravity="center"
            android:layout_gravity="center"
            android:background="@drawable/recordsytle"
            android:visibility="gone"/>
        <ProgressBar
            android:id="@+id/circle"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:indeterminateDrawable="@drawable/progressbar"
            android:visibility="invisible"
            />


    </FrameLayout>

</LinearLayout>

这块主要使用FrameLayout,来完成效果的展示,通过尺寸的调整,让用户看起来好像是一个东西,此处应该有更好的实现方式,欢迎各位留言指导。

主Activity实现很简单,代码奉上:

 package com.example.tom.progressdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    ImageButton mRecordBtn;
    TextView mPauseTxt;
    ProgressBar mProgressBar;
    boolean flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
    }

    private void initViews() {
        mRecordBtn = (ImageButton) findViewById(R.id.record);
        mPauseTxt = (TextView) findViewById(R.id.pause);
        mProgressBar = (ProgressBar) findViewById(R.id.circle);

        mRecordBtn.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        switch (id){
            case R.id.record:
                if (flag) {
                    mProgressBar.setVisibility(View.GONE);
                    mPauseTxt.setVisibility(View.GONE);

                    flag = false;
                } else {
                    mProgressBar.setVisibility(View.VISIBLE);
                    mPauseTxt.setVisibility(View.VISIBLE);


                    flag = true;
                }


               break;

            default:

        }
    }
}

整个Demo的下载

点我下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值