Mam wymaganie, gdy widok przeciągalny wymaga, aby cień był początkowo umieszczony bezpośrednio nad widokiem - to znaczy, że obejmuje cały widok, a nie odnosi się do punktu dotyku .Jak pozycjonować płótno w View.DragShadowBuilder.onProvideShadowMetrics
Próbowałem wszystkich rodzajów, aby to działało z moją podklasą View.DragShadowBuilder
, ale bez powodzenia. Miałem nadzieję, że użycie drawRect
pozwoli mi określić punkty prostokąta, tak aby były rysowane w tym samym prostokącie co mój widok, ale powoduje to, że nie zostanie narysowane żadne płótno.
Jednak po prostu za pomocą canvas.drawColor(Color.CYAN)
rysuje prostokąt, ale w stosunku do punktu dotyku.
Oto moja próba korzystania drawRect
:
private class VideoDragShadowBuilder extends View.DragShadowBuilder {
public VideoDragShadowBuilder(View v) {
super(v);
}
@Override
public void onProvideShadowMetrics (Point size, Point touch) {
int width, height;
width = getView().getWidth();
height = getView().getHeight();
size.set(width, height);
touch.set(width/2, height/2);
}
@Override
public void onDrawShadow(Canvas canvas) {
//canvas.drawColor(Color.CYAN);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setAlpha(45);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.CYAN);
canvas.drawRect(getView().getLeft(), getView().getTop(), getView().getRight(), getView().getBottom(), paint);
}
}
Tutaj niebieski prostokąt jest lekko przesunięte z widokiem spodu powodu gdzie dotknąłem - Chcę, aby całkowicie pokryć pogląd, niezależnie od tego, gdzie dotyka użytkowników .
zamieścić zdjęcie z wymaganego wyniku, w przeciwnym razie trudno jest powiedzieć, co właściwie chcemy osiągnąć – pskink
@pskink Dzięki za sugestię, mam edytowane pytanie –
coś takiego: http: // pastebin. com/3KuF8EmZ? utwórz tego buildera na przykład w onTouchEvent, gdy akcją jest ACTION_DOWN: DragShadowBuilder builder = new DSB (this, event); – pskink