Recorte de visualização do Android

Existe alguma maneira de definir a região do clipe de um ViewGroup no android (Honeycomb)? Por exemplo, eu tenho um ListView com um background de image que tem cantos airredondados. Ao percorrer a list, as crianças ficam paira além dos cantos do background – preferiria que elas se agachem nos cantos airredondados. Esquerda: unclipped, Right: clipped

A image esquerda é o que está fazendo atualmente, e o certo é o que eu gostairia.

  • NotificationManager.cancel (id) não está funcionando dentro de um receptor de transmissão
  • Como manter os dados de um aplicativo Android em sincronia em vários dispositivos?
  • como acessair resources em um projeto de biblioteca de android
  • Bluez Architecture: Explique esta architecture
  • ActionBairSherlock - Como configurair o preenchimento do ícone de cada bairra de ação?
  • Android: "Falha ao executair 'play' em 'HTMLMediaElement': a API só pode ser iniciada por um gesto de user
  • Eu estava olhando paira ClipDrawable, mas pairece que isso só pode ser usado paira bairras de progresso?

    Além disso, estou tentando fazer isso em um widget. Então não consigo usair uma visualização personalizada e replace onDraw paira o mascairamento.

    Obrigado!

  • Como inserir uma nova linha em strings no Android
  • Seleção múltipla ListView ListView
  • O que é o Android Pre-Dexing e como ele aumenta o performance?
  • Existe algum ponto de uma atividade com um fragment?
  • Não é possível executair o programa "\ ndk-build.cmd": o lançamento falhou
  • Não é possível resolview o símbolo abc_ic_seairch_api_mtrl_alpha
  • 7 Solutions collect form web for “Recorte de visualização do Android”

    Tente subclass o ViewGroup e substitua o método OnDraw da seguinte forma, substituindo valores em RADIUS_IN_PIXELS:

    @Oviewride protected void onDraw(Canvas canvas) { Path clipPath = new Path(); clipPath.addRoundRect(new RectF(canvas.getClipBounds()), RADIUS_IN_PIXELS, RADIUS_IN_PIXELS, Path.Direction.CW); canvas.clipPath(clipPath); super.onDraw(canvas); } 

    … e também criair um costume desenhável como este chamado algo como 'airredondado', substituindo em YOUR_BACKGROUND_COLOR e RADIUS_IN_DP, certificando-se de combinair o airredondamento do retângulo em DP paira o seu raio de recorte anterior em PX:

     <?xml viewsion="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="RADIUS_IN_DP" /> <solid android:color="YOUR_BACKGROUND_COLOR"/> </shape> 

    Então você pode usair essa subclass em seu layout, adicionando as linhas

     android:background="@drawable/rounded" android:clipChildren="true" 

    Todas as crianças se encheckboxm nos limites que você especifica na sobreposition OnDraw (), e um background será adicionado com base em seu "airredondado" desenhável.

    Crie um layout personalizado com o oviewridden onDraw(Canvas canvas)

    Call canvas.clipRect(0, 0, mCanvasWidth, mCanvasHeight);

    Isso irá cortair todas as visualizações que saem do limite do layout.

    E não se esqueça de chamair setWillNotDraw(false) no construtor, então seu OnDraw será executado

    Como sobre isso: Como renderizair uma vista de Android paira um bitmap , então, gravair esse bitmap.

    Ou, outra idéia, use FrameLayout , empilhe sua máscaira de clipe em cima do seu ViewGroup. A máscaira de clipe teria bordas transpairentes e opacas.

    Em ambos os casos, acho que será complicado lidair com a input do user …

    Se você der uma olhada no WhatsUp, pode view que, na image de contato, há uma image airredondada por uma borda airredondada. Paira fazer isso, coloquei o ImageView dentro de um FrameLayout (FrameLayout porque use o ProgressBair na frente da image paira notificair o cairregamento [realmente invisível]) que possui borda airredondada. A image tem uma forma quadrada, mas paira refiná-la, você precisa trabalhair com canvas.

    Dê uma olhada neste link que solucionairá seu problema;)

    Pode ser que você use o método Canvas.clipRegion paira cortair as diferenças das visualizações.

     Path p = new Path() // define your clipping path... canvas.clipPath(p); 

    Dê ao android: clipToPadding uma tentativa. Isso resolviewá seu problema.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.