Intereting Posts
Смена громкости. Слушатель: предпочтительнее ли registerMediaButtonEventReceiver для onKeyDown? Звук не отображается при потоковой передаче между классом java и андроидной активностью Ошибка Eclipse: анализ ошибок … \ android-22 \ android-wear \ armeabi-v7a \ devices.xml Внедрить разделитель между последним элементом дочернего элемента и следующим Groupheader expandableListview Как получить мой ssid hotspot wifi в моей текущей системе Android Модернизация 2 с данными только формы Как получить доступ к содержимому ответа об ошибке в Volley? Установка google-приложений на genymotion SetCanceledOnTouchOutside не работает, когда я нажимаю рядом с диалогом снаружи Android: Стандарты для префикса файлов в каталоге RES, кроме ic_? Начать работу с помощью пользовательского действия Доступ к Microsoft Band SDK (ПК и Android) FragmentActivity onSaveInstanceState не получает вызов Как создать этот тип кисти для краски в андроиде Инструмент командной строки Android Debug Bridge (adb) существует в $ PATH, но «команда не найдена» в Linux

Градиент развертки: что это такое и его примеры

Я наткнулся на Sweep Gradient на Android и был заинтригован, если бы он мог улучшить контроль над интервалами и переходами цвета. Сделал быстрый поиск и почти ничего не нашел!

Только несколько ссылок, которые я нашел (и они не отвечают критериям приближения даже близко к объяснению его правильно или всесторонне), перечислены ниже:

  • Sweep Gradient на Android (который упоминает только команды для использования, что почти не стоит, поскольку прямо сейчас я не знаю, что такое Sweep Gradient!)
  • Android create pie dount с градиентом и аналогичными Вопросами (большинство из них относятся к Rings – для которых используется развертка)
  • Градиенты в Photoshop (в котором говорится об угловом градиенте, который, я думаю, может быть связан с градиентом Sweep)
  • Программа Java Android для демонстрации градиента развертки в Android (снова работает с кольцами)

Так что почти об этом. Другие похожи или пренебрежительно кратки.


Довольно мало выводов, которые я сделал до сих пор (и, возможно, ошибаюсь):

  • Градиент развертки в основном используется для колец
  • Они используются для аналогичных транзакций, таких как Угловая развертка (не уверенная об этом), в которой говорится о транзакции, подобной разметке часов.
  • Очень похоже на линейные градиенты . Единственное, что я могу думать о различии между ними, – это использование (например, Rings).
  • Sweep имеет дело с Центром (снова сильная ссылка на теорию часов)

Я знаю, что люди могут считать это не совсем техническим вопросом. Но для меня работать с Sweep Gradients или, по крайней мере, знать, что они означают, описание должно происходить откуда-то. И, пожалуйста, предоставьте ответы на некоторые примеры использования Sweep в случаях, отличных от Rings.

Solutions Collecting From Web of "Градиент развертки: что это такое и его примеры"

Градиент слова в этом контексте (как и во многих графических редакторах, включая Photoshop) относится к плавному переходу между несколькими цветами , а не к использованию только одного цвета для заполнения области.

API Android предлагает 3 разных градиента: LinearGradient , RadialGradient и SweepGradient .

Это все подклассы Shader . Вы можете установить Shader на объект Paint , а затем нарисовать любую фигуру с помощью этой Paint . Форма будет заполнена цветами и переходами между ними, в зависимости от вида градиента.

Например:

Выходное изображение кода ниже

Это изображение можно создать с помощью этого кода:

 Bitmap test = Bitmap.createBitmap(640, 200, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(test); { // draw a dark gray background Paint backgroundPaint = new Paint(); backgroundPaint.setARGB(255, 24, 24, 24); c.drawPaint(backgroundPaint); } Path heart = new Path(); { // prepare a heart shape heart.moveTo(110, 175); heart.lineTo(10, 75); RectF leftCircle = new RectF(10, 25, 110, 125); heart.arcTo(leftCircle, 180, 180); RectF rightCircle = new RectF(110, 25, 210, 125); heart.arcTo(rightCircle, 180, 180); heart.close(); } Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setTextSize(18f); int[] colors = { 0xFFFFFF88, // yellow 0xFF0088FF, // blue 0xFF000000, // black 0xFFFFFF88 // yellow }; float[] positions = {0.0f, 0.33f, 0.66f, 1.0f}; { // draw the left heart SweepGradient sweepGradient; { // initialize the sweep gradient sweepGradient = new SweepGradient(50, 50, colors, positions); paint.setShader(sweepGradient); } c.drawPath(heart, paint); c.drawText("SweepGradient", 50, 190, paint); } { // draw the middle heart LinearGradient linearGradient; { // initialize a linear gradient linearGradient = new LinearGradient(250, 0, 350, 150, colors, positions, Shader.TileMode.CLAMP); paint.setShader(linearGradient); } heart.offset(210, 0); // move the heart shape to the middle c.drawPath(heart, paint); c.drawText("LinearGradient", 260, 190, paint); } { // draw the right heart RadialGradient radialGradient; { // initialize a linear gradient radialGradient = new RadialGradient(550, 50, 100, colors, positions, Shader.TileMode.CLAMP); paint.setShader(radialGradient); } heart.offset(210, 0); // move the heart shape to the right c.drawPath(heart, paint); c.drawText("RadialGradient", 470, 190, paint); } { // save the bitmap String filename = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.png"; FileOutputStream out = null; try { out = new FileOutputStream(filename); test.compress(Bitmap.CompressFormat.PNG, 90, out); } catch (Exception e) { } finally { try { out.close(); } catch (Exception e) { } } } 
  • Таким образом, LinearGradient является Linear Gradient в Photoshop, RadialGradientRadial Gradient , а SweepGradientAngular Gradient , как описано в третьей ссылке. Я рекомендую сначала попробовать их в редакторе изображений (все популярные редакторы изображений имеют эти инструменты), и вы быстро получите представление о том, как они работают.

  • Вы также можете использовать эти градиенты в XML-чертеже (например, в вашей 4-й ссылке) с ограничением использования трех цветов максимум.

  • В SweepGradient , при SweepGradient позиций, точка 0.0 находится в 3 часа, идет по часовой стрелке (с 0,25 в 6 часов, 0,5 в 9 часов, 0,75 в 12 часов и 1,0 назад при 3 o 'Часы).

О ваших выводах:

  • Как вы можете видеть, любую фигуру можно нарисовать с помощью SweepGradient , а не только с кольцом. Даже ярлыки рисуются градиентами в приведенном выше примере.
  • Да, ручная аналогия часов.
  • В использовании SweepGradient очень похож на LinearGradient , за исключением того, что вам не нужно предоставлять TileMode , потому что вы не можете запускаться за пределы вашего списка цветов.
  • Да, вам нужно предоставить координаты центральной точки.

Надеюсь, это прояснит ситуацию.