Я пытался использовать EmbossMaskFilter для создания пользовательских Drawable.
Однако я столкнулся со странным поведением, что когда я пытаюсь использовать Emboss, это вызывает
черные полосы на краях других объектов 2D-графики, которые перекрываются «рельефными» границами рисования.
Я что-то упустил? может быть, какая-то настройка смешивания пикселей или как?
Пример: черные полосы на «выцветаниях» ScrollView.
Когда я снимаю тиснение маски, они исчезли.
Также, когда я сделал ImageButton с рисованным фоном, используя Emboss, а передний - как холст, этот передний контур также получает полосы.
Activity (+ main.xml = LinearLayout в ScrollView = http://pastebin.com/031AV6Wp):
public class TestEmbossActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setMaskFilter(new BlurMaskFilter(15, Blur.INNER));
paint.setMaskFilter(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 5, 3f));
ViewGroup container = (ViewGroup) findViewById(R.id.container);
for(int i = 0; i < 20; i++) {
ImageView view = new ImageView(this);
view.setScaleType(ScaleType.FIT_XY);
Drawable drawable = new MyDrawable(paint);
view.setImageDrawable(drawable);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(100, 100);
params.bottomMargin = 10;
container.addView(view, params);
}
}
private static class MyDrawable extends Drawable {
Paint paint;
private MyDrawable(Paint paint) {
this.paint = paint;
}
@Override
public void draw(Canvas canvas) {
Rect bounds = getBounds();
canvas.drawRect(bounds, paint);
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void setAlpha(int alpha) {
// TODO Auto-generated method stub
}
@Override
public void setColorFilter(ColorFilter cf) {
// TODO Auto-generated method stub
}
}
}