2013-02-15 2 views
3

Целью является создание составной формы и добавление эффекта тиснения. Я могу успешно создать форму, как показано ниже.Как создать несколько фигур и добавить тиснение?

woodPaint = new Paint(); 
    woodPaint.setAntiAlias(true); 
    woodBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.wood); 
    woodShader = new BitmapShader(woodBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT); 
    woodPaint.setShader(woodShader); 

    ... 

    @Override 
    protected void onDraw(Canvas canvas) { 

     canvas.drawCircle(handleX, radius, radius, woodPaint); 
     canvas.drawRoundRect(baseRectF, 25, 25, woodPaint); 

     super.onDraw(canvas); 
    } 

Изображение:

Затем я добавляю EmbossMaskFilter

paintEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.1f, 8f, 5f); 
    woodPaint.setMaskFilter(paintEmboss); 

Изображение:

Как вы можете видеть, маска выбивать применяется к двум форм в отдельности. Как я могу составить фигуры вместе и применить тиснение ко всему объекту? Я пробовал установить режим xfer на какой-то вкус от портер-даффа, но это не влияет на то, что маска для тиснения применяется к каждой форме отдельно.

Спасибо за помощь!

Редактировать: Как показано на рисунке Orabîg, вы должны нарисовать один путь с краской, на которой вы установили фильтр для тиснения. ПРИМЕЧАНИЕ. Метод setMaskFilter() является одним из нескольких методов, которые не работают при включении аппаратного ускорения. Я решил проблему, с которой я столкнулся с телефоном, работающим с желеобразным компонентом, отключив аппаратное ускорение для этой активности. Вы можете отключить аппаратное ускорение в любом level вы выбираете:

  • Применения
  • активности
  • Окна
  • Посмотреть

Ура!

ответ

4

Ну, вам нужен только один эффект тиснения, поэтому вы должны сделать одну форму.

Значит, вы должны использовать метод Canvas.drawPath().

Вы просто должны определить объект Path, со следующими методами: Path definition steps Начнет с определением 3 объектов RectF, которые будут ограничительными рамками левого круглым (представьте круг позади него), самый правый и скользящий: boxes definitions Возможно, вам придется сделать некоторые дополнительные математические вычисления, чтобы определить правильные углы для использования в коробке2 (они зависят от соответствующего размера круга и всего прямоугольника)

Удачи!

+0

В настоящее время я не на ПК, но это точный ответ, который я искал. Спасибо! –

+0

Я обнаружил, что мне нужно было подключить каждую коробку с помощью lineTo(). Исправив это, я обнаружил, что мой эффект тиснения не применяется к пути, который я нарисовал. Я дважды проверял, чтобы убедиться, что я вызываю canvas.drawPath (thePath, woodPaint) с объектом woodPaint, у которого установлен фильтр маски для тиснения. Есть идеи? Являются ли пути обработаны по-разному, что формирует? –

+0

Я добавил к своему вопросу, чтобы показать, как я преодолел проблемы аппаратного ускорения. Еще раз спасибо! –

Смежные вопросы