如何限制Android Seekbars以阻止用户正确移动它?

时间:2018-02-11 06:10:24

标签: c# android xamarin

我正在使用Xamarin开发Android应用程序,我正在寻找一种限制Android搜索栏的解决方案,以防止用户将搜索栏向右移动(增加值)。

目前,该页面有4个搜索栏,每个搜索栏代表从“篮子”给予一个人的Apple数量(篮子在每个人之间共享)。 (A,B,C,D)

如果“basket”有任何值(basket是int类型),则用户可以移动任何滑块。例如,如果他们希望向A提供更多苹果,那么他们只需将第一个滑块向右移动即可。

如果“篮子”没有任何值,那么滑块都不应该移动。

因为有4个搜索栏(4个ppl)并且它必须同步(意味着条形图中的每个更改都必须被带入帐户,因为ppl共享相同的“篮子”)

有没有办法禁止向导栏移动到右边?

提前致谢

2 个答案:

答案 0 :(得分:1)

这可以做到这一点吗?

seekBar.ProgressChanged += (object sender, SeekBar.ProgressChangedEventArgs e) => {
    if (e.FromUser < oldValue)
    {
        oldValue = e.Progress;
        //your stuff
    }
    seekBar.Progress = oldValue;
};

答案 1 :(得分:0)

  

因为有4个搜索栏(4个ppl)并且它必须同步(意味着条形图中的每个更改都必须被带入帐户,因为ppl共享相同的&#34;篮子&#34;)

     

有没有办法禁止向导栏移动到右边?

您需要在ProgressChanged时检查总值,如果溢出,则将当前搜索栏的进度设置为最大值:

public class MainActivity : Activity
{
    SeekBar sbOne, sbTwo, sbThree, sbFour;
    TextView tvTotal;
    int total=100;
    List<SeekBar> seekbars;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        sbOne = FindViewById<SeekBar>(Resource.Id.sbOne);
        sbTwo = FindViewById<SeekBar>(Resource.Id.sbTwo);
        sbThree = FindViewById<SeekBar>(Resource.Id.sbThree);
        sbFour = FindViewById<SeekBar>(Resource.Id.sbFour);
        tvTotal = FindViewById<TextView>(Resource.Id.tbTotal);
        seekbars = new List<SeekBar> { sbOne, sbTwo, sbThree, sbFour };

        //register the events
        for (int i = 0; i < 4; i++)
        {
            seekbars[i].ProgressChanged += ProgressChanged;
        }


    }


    private void ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        SeekBar sb = sender as SeekBar;
        int tmp=0;
        for (int i = 0; i < 4; i++)
        {
            tmp += seekbars[i].Progress;
        }

        if (tmp > total)
        {
            //if overflows then set current seekbar's progress to a proper value
            sb.Progress-=(tmp-total);
        }
    }

}