圆形半径的Android进度条动态变化

     2023-02-26     171

关键词:

【中文标题】圆形半径的Android进度条动态变化【英文标题】:Android Progressbar with circle radius changes Dynamically 【发布时间】:2012-02-22 12:53:06 【问题描述】:

我想根据滑块位置更改圆半径

我分别创建了这两个。 同时将 circle 方法应用于进度条。 面临错误。

其实我用

来调用 Progress-Bar(Seek Bar)
setContentView(R.layout.main);

如你所知,为了画圈,我必须使用setContentView(demoview);

查询:我想将两个布局作为显示合并到图像中。

我不知道这是否可行?

任何指导,教程可观。

感谢您抽出宝贵的时间来咨询我的问题。 希望你有解决方案。

【问题讨论】:

我不完全明白,你想要达到什么目的。是否要根据滑块位置更改圆半径? 是的..你是 100% 正确的。但在此之前我想在一个屏幕上同时显示这两个我遇到错误。 【参考方案1】:

看看这个.. 我没有使用android seekbar,而是在画布上绘制了一个类似的seekbar .. 检查此代码是否可以帮助您..

package com.test;

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

public class SampleComp extends View implements OnTouchListener 

    private Paint paint = null;
    private int width = 0;
    private int height = 0;
    private int barStartX = 20;
    private int barStartY = 20;
    private int barEndX;
    private int barEndY = 30;
    private int radius;
    private int heightAvailableForCircle;
    private int widthAvailableForCircle;
    private int maxRadius;
    private int totalSeekBarLength;
    private int currentSeekBarLength = 10;
    private int whatPercentOfSeekBarIsSelected = 50;

    public SampleComp(Context context) 

        super(context);
        paint = new Paint();
        paint.setAntiAlias(true);
        setOnTouchListener(this);
    
    public SampleComp(Context context, AttributeSet attrs) 

        super(context, attrs);
        paint = new Paint();
        paint.setAntiAlias(true);
    
    public SampleComp(Context context, AttributeSet attrs, int defStyle) 

        super(context, attrs, defStyle);
        paint = new Paint();
        paint.setAntiAlias(true);
    

    @Override
    public void onDraw(Canvas canvas)

        barEndX = getWidth() - 20;
        paint.setColor(Color.WHITE);
        setWidth(canvas.getWidth());
        setHeight(canvas.getHeight());

        setHeightAvailableForCircle(getViewHeight() - barEndY);
        setWidthAvailableForCircle(getViewWidth() - 40);
        System.out.println("heightAvailableForCircle: "+getAvailableHeightForCircle());
        System.out.println("widthAvailableForCircle: "+getWidthAvailableForCircle());
        totalSeekBarLength = barEndX - barStartX;
        System.out.println("SEEK LEN: "+totalSeekBarLength);
        canvas.drawRect(barStartX, barStartY, barEndX, barEndY, paint);
        paint.setColor(Color.BLUE);
        setMaxRadius(heightAvailableForCircle, widthAvailableForCircle);
        whatPercentOfSeekBarIsSelected = getSelectedSeekBarPercentage(totalSeekBarLength,getCurrentSeekBarLenghtSelected());
        System.out.println("whatPercentOfSeekBarIsSelected: "+whatPercentOfSeekBarIsSelected);
        System.out.println("!!!!!: "+canvas.getWidth());
        System.out.println("@@@@: "+getViewWidth());
        System.out.println("^^^^^^^^^************: "+ (whatPercentOfSeekBarIsSelected * (getViewWidth() - 40)) / 100);
        canvas.drawRect(barStartX, barStartY, ( (whatPercentOfSeekBarIsSelected * (getViewWidth() - 40)) / 100) + 20,
                barEndY, paint);
        paint.setColor(Color.GRAY);
        setRadius(whatPercentOfSeekBarIsSelected);
        canvas.drawCircle( (canvas.getWidth())/2, (canvas.getHeight() - 30)/2, radius, paint);
    

    private void setRadius(int per)

        this.radius = (getMaxRadius() * per)/100;
    
    private int getSelectedSeekBarPercentage(int total, int current)

        int per = 0;
        per = ( (current * 100) / total);
        return per;
    
    private void setRadius(int total, int current)

        System.out.println("total: "+total);
        System.out.println("current: "+current);
        this.radius = ( ( (getMaxRadius()/2) * current) / 100);
        System.out.println("radius: "+this.radius);
    
    private void setMaxRadius(int h, int w)

        this.maxRadius = h < w ? h/2 : w/2 ;
    
    private int getMaxRadius()

        return this.maxRadius;
    
    private void setWidth(int w)

        this.width = w;
    

    private void setHeight(int h)

        this.height = h;
    

    private int getViewWidth()

        return this.width;
    

    private int getViewHeight() 

        return this.height;
    

    private void setHeightAvailableForCircle(int availableHeightForCircle)

        this.heightAvailableForCircle = availableHeightForCircle;
    
    private int getAvailableHeightForCircle()

        return this.heightAvailableForCircle;
    

    private void setWidthAvailableForCircle(int wid)

        this.widthAvailableForCircle = wid;
    

    private int getWidthAvailableForCircle()

        return this.widthAvailableForCircle;
    
    private void setCurrentSeekBarLength(int x)

        this.currentSeekBarLength = x;
    
    private int getCurrentSeekBarLenghtSelected()

        return this.currentSeekBarLength;
    
    @Override
    public boolean onTouch(View v, MotionEvent event) 

        int x = (int) event.getX();
        int y = (int) event.getY();
        System.out.println("x: "+x);
        System.out.println("y: "+y);

        if(x >= 10 && x<= barEndX && y >= 10 && y <= 30)

            System.out.println("TRUE");
            setCurrentSeekBarLength(x - 20);
            invalidate();
        
        return false;
    

这是我的 Activity 类:

package com.test;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.ImageView;

public class SampleActivity extends Activity 

    @Override
    public void onCreate(Bundle savedInstanceState) 

        super.onCreate(savedInstanceState);
        setContentView(new SampleComp(this));
    

【讨论】:

【参考方案2】:

您能否更具体地说明您想要实现的目标。你的问题不是那么清楚。我可以弄清楚的是,你想根据进度条值增加/减少圆的半径。

【讨论】:

这是我的第二个优先事项。现在我想在布局中显示带有进度条的圆圈,这可能吗?如何?之后我想用进度条改变半径。希望你现在清楚这一点......【参考方案3】:

看看android custom component guide。你基本上必须从android.view.View 派生你的圈子组件。然后,您可以像其他所有组件一样将其添加到您的布局中。

【讨论】:

长按如何使进度条变化android

...个progressbarbg.xml文件。gradient可以设置进度条的渐变色,android:endColor和android:startColor可以设置渐变开始和结束的颜色。定义完成以后,便可以使用。在音乐进度,网络下载时,需动态加载进度条,默认情况下,设置进度条,使... 查看详情

android自定义view之圆形进度条

这段时间正在学习自定义View以及属性动画的知识,然后刚好用这个来练练手,无图无真相,直接看图:简单自定义了一个比较通用的圆形进度条,像上图所示的可以定义圆的半径,进度颜色,宽度࿰... 查看详情

纯css3制作圆形进度条所遇到的问题

  近日在开发的页面中,需要制作一个动态的圆形进度条,首先想到的是利用两个矩形,宽等于直径的一半,高等于直径,两个矩形利用浮动贴在一起,设置overflow:hidden属性,作为盒子,内部有一个与其宽高相等的子盒子,... 查看详情

圆形进度条 Android

】圆形进度条Android【英文标题】:CircularProgressBarAndroid【发布时间】:2015-06-0320:06:35【问题描述】:我想创建一个分段的圆形进度条,其行为类似于倒数计时器,这样每个分段都有自己的时间限制。有一个iOS应用pTimer+,我想在An... 查看详情

带圆角的 Android 圆形进度条

】带圆角的Android圆形进度条【英文标题】:Androidcircularprogressbarwithroundedcorners【发布时间】:2016-08-0623:37:54【问题描述】:我正在尝试获得一个带有圆角的圆形进度条,如下所示。但到目前为止,我无法获得圆角,我能够获得圆... 查看详情

android中的圆形进度条

】android中的圆形进度条【英文标题】:Circularprogressbarinandroid【发布时间】:2015-09-1318:26:05【问题描述】:我想实现一些圆形进度条,中间有一个按钮,就像在whatsapp中一样。有谁知道一个好的图书馆来实现这一点?我想要完成... 查看详情

CSS / jQuery:动态更新的文本出现在右侧而不是圆形进度条内

】CSS/jQuery:动态更新的文本出现在右侧而不是圆形进度条内【英文标题】:CSS/jQuery:Dynamicallyupdatedtextappearsrightofinsteadofinsidecircularprogressbar【发布时间】:2020-11-0108:13:30【问题描述】:我正在尝试实现一个带有动画的圆形进度条... 查看详情

如何在android中实现材料设计圆形进度条

】如何在android中实现材料设计圆形进度条【英文标题】:Howtoimplementamaterialdesigncircularprogressbarinandroid【发布时间】:2015-01-0501:04:38【问题描述】:我想制作一个类似于InboxbyGmailandroid应用中的MaterialDesign圆形进度条。我如何实现... 查看详情

如何更改圆形进度条的颜色?

...gressbar?【发布时间】:2011-07-1707:03:54【问题描述】:我在Android上使用循环进度条。我想改变它的颜色。我正在使用"?android:attr/progressBarStyleLargeInverse"风格。那么如何改变进度条的颜色呢。如何自定义样式?另外,风格的定义是什... 查看详情

如何在Android中创建一个在其上旋转的圆形进度条?

】如何在Android中创建一个在其上旋转的圆形进度条?【英文标题】:HowtoCreateacircularprogressbarinAndroidwhichrotatesonit?【发布时间】:2014-02-1512:25:24【问题描述】:我正在尝试创建一个圆形进度条。这就是我想要实现的目标有一个灰... 查看详情

android之自定义圆形进度条

    在Android开发中,对于进度条想必大家不会陌生。例如,应用在执行一个耗时操作时,会通过展示一个进度条来显示“加载中...”的动画作为友好页面以提高用户体验。对于这样的进度条,最简单的实现方式... 查看详情

android进度条样式怎么改

Android系统提供了两大类进度条样式,长形进度条(progressBarStyleHorizontal)和圆形进度条(progressBarStyleLarge)。android进度条样式更改:第一种(默认样式(中等圆形))第二种(长方形进度条)进度条用处很多,比如,应用程序装载资源... 查看详情

解决圆形进度条progressbar的几个问题(代码片段)

Android自带的Progressbar默认就是圆形的,可以通过style属性style="?android:attr/progressBarStyleHorizontal"变成条状进度条,如下:<ProgressBarandroid:layout_width="match_parent"androi 查看详情

解决圆形进度条progressbar的几个问题(代码片段)

Android自带的Progressbar默认就是圆形的,可以通过style属性style="?android:attr/progressBarStyleHorizontal"变成条状进度条,如下:<ProgressBarandroid:layout_width="match_parent"androi 查看详情

android自定义控件篇圆形进度条(代码片段)

一、效果图二、代码逻辑/***funcation:圆形进度条控件*/publicclassCircleProgressViewextendsViewprivatePaintmBackPaint,mProgPaint;//绘制画笔privateRectFmRectF;//绘制区域privateint[]mColorArray;//圆环渐变色privateintmProgress;//圆环进度(0-100)publicCircleProgressView(Co... 查看详情

带有图像和圆形进度条的圆形按钮

】带有图像和圆形进度条的圆形按钮【英文标题】:Circularbuttonwithimageandcircularprogressbar【发布时间】:2019-12-2819:29:53【问题描述】:我正在尝试制作一个按钮,里面有一个图像,外面有一个圆形进度条,按下按钮后是彩色的。我... 查看详情

qt第三方圆形进度条-及其改进

Qt第三方圆形进度条的改进要实现一个圆形的进度条功能,在网上找到一个比较出名的第三方封装类:QRoundProgressBar,地址:sourceforge的QRoundProgressBar 功能封装的还是不错,提供了3种模式,线形、圆环、饼状。使用过程中发现... 查看详情

ios制作个圆形进度条

参考技术A1.需要做个这样的圆形进度条 自定义弹窗view就不说了,主要是这个圆形进度view,底色是灰色然后有进度灰色被黑色覆盖或者说变成黑色首先我们自定一个view,加个uilabel做进度lbael@property(nonatomic,strong)UILabel*percentLabel;/... 查看详情