private void RefreshStats(bool now = false) { if (data == null || pokemon == null) { return; } Task.Run(() => { int playerLevel = GoOnTapApplication.Config.PlayerLevel; int cpMin = pokemon.GetMinimumCP(pokemonLevel); int cpMax = pokemon.GetMaximumCP(pokemonLevel); int hpMin = pokemon.GetMinimumHP(pokemonLevel); int hpMax = pokemon.GetMaximumHP(pokemonLevel); // Update UI assistantLayout.Post(() => { // Text views levelValue.Text = pokemonLevel.ToString(); cpValue.Text = data.CP.ToString(); hpValue.Text = data.HP.ToString(); // Seek bars levelSeek.Enabled = false; cpSeek.Enabled = false; hpSeek.Enabled = false; playerLevelSeek.Enabled = false; levelSeek.Max = Math.Min(playerLevel * 2 + 2, 78); levelSeek.Progress = (int)(pokemonLevel * 2) - 2; cpSeek.Max = cpMax - cpMin; cpSeek.Progress = data.CP - cpMin; hpSeek.Max = hpMax - hpMin; hpSeek.Progress = data.HP - hpMin; playerLevelSeek.Progress = playerLevel - 1; levelSeek.Enabled = true; cpSeek.Enabled = true; hpSeek.Enabled = true; playerLevelSeek.Enabled = true; // Arc feedback float density = Context.Resources.DisplayMetrics.Density; float levelAngle = (float)PokemonInfo.GetLevelAngle(pokemonLevel, playerLevel); float feedbackX = data.ArcX - (float)Math.Cos(levelAngle * Math.PI / 180) * data.ArcSize; float feedbackY = data.ArcY - (float)Math.Sin(levelAngle * Math.PI / 180) * data.ArcSize; RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams((int)(20 * density), (int)(20 * density)); layoutParams.LeftMargin = (int)(feedbackX - 10 * density); layoutParams.TopMargin = (int)(feedbackY - 10 * density); arcFeedback.LayoutParameters = layoutParams; arcFeedback.Visibility = ViewStates.Visible; string pokemonName = pokemon.GetLocalizedName(Locale.Default.ToString()); // Pokemon image if (name.Text != pokemonName) { name.Text = pokemonName; lastBitmap?.Recycle(); lastBitmap = GetPokemonIcon(pokemon.Id); image.SetImageBitmap(lastBitmap); } }); RefreshIVs(now); }); }