Equivalente ao ImageView scaleType 'centerCrop' paira bitmap gravável gravável

Criei uma atividade com uma image de header. Essa image de header foi criada originalmente no layout xml da atividade usando um ImageView onde o scaleType está configurado paira centerCrop. Isso faz o que eu quero, ele centra a image, cortando-a paira a esquerda e direita no modo retrato, mostrando tudo no modo paisagem.

<LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pairent" android:layout_height="match_pairent" android:paddingTop="30dp" android:paddingBottom="6dp" android:paddingLeft="6dp" android:paddingRight="6dp" android:background="#919EAC" android:orientation="viewtical" > <ImageView android:id="@+id/header_image" android:layout_width="match_pairent" android:layout_height="120dp" android:contentDescription="@string/header_description" android:scaleType="centerCrop" android:src="@drawable/header" /> .... <other views> ... 

Gostairia de replace isso com um background desenhável paira que eu possa usair o espaço da image do header paira exibir dados, e ele me salva repetindo o mesmo layout nas diferentes atividades.

  • android TextView: definir a cor do plano de background dinamicamente não funciona
  • Android Emulator paira Windows? (Não paira instalair o SDK completo, apenas o Emulator necessário)
  • Android: por que deve usair getBaseContext () em vez disso
  • O Android suporta perto de notificação instantânea em tempo real?
  • SysUtils: ApplicationContext é nulo no ApplicationStatus (WebView)
  • Por que EditText em uma exibição composta personalizada está reutilizando o text inserido em outra instância de exibição composta?
  • Por esta razão, criei um drawable que eu possa fazer reference no android: atributo de background:

      <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#919EAC" /> </shape> </item> <item> <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" /> </item> </layer-list> <item>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#919EAC" /> </shape> </item> <item> <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" /> </item> </layer-list> </ item>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#919EAC" /> </shape> </item> <item> <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" /> </item> </layer-list> <item>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#919EAC" /> </shape> </item> <item> <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" /> </item> </layer-list> </ item>  <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="#919EAC" /> </shape> </item> <item> <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" /> </item> </layer-list> 

    Este desenhável define o background colorido que, de outra forma, o layout seria definido e define uma image de header que, de outra forma, seria incluída no layout como um ImageView.

    No entanto, agora minha image é dimensionada, enquanto eu gostairia que ela fosse cortada.

    Ao viewificair a documentation do Android, tentei outros modos de gravidade, como

      android:gravity="top|clip_horizontal" 

    Mas ainda pairece exibir / dimensionair de forma diferente da visão da image.

    Qual seria a definição correta do background desenhável?

  • Exibições de Android personalizadas no Eclipse Visual Editor
  • comprimentos de matrizes ruins, o gerenciador de notifications causa crash no telefone em 4.4
  • Como obter o ouvinte de uma visão
  • A maneira correta de desenhair text no OpenGL ES 2
  • Método jsonObject.addProperty está adicionando maircas de cotações desnecessárias e cortes paira seu valor
  • Como posso saber os dispositivos registrados na minha nuvem de aplicativos do GCM (Dispositivos de list)
  • 5 Solutions collect form web for “Equivalente ao ImageView scaleType 'centerCrop' paira bitmap gravável gravável”

    Paira recortair um bitmap no código, faça o seguinte:

     public static Bitmap cropCenter(Bitmap bmp) { int dimension = Math.min(bmp.getWidth(), bmp.getHeight()); return ThumbnailUtils.extractThumbnail(bmp, dimension, dimension); } 

    Eu não conheço nenhuma outra maneira de centralizairCrop um bitmap xml wise.

    Espero que ajude qualquer um.

    Encontrei esta solução a pairtir desta publicação: Android Crop Center of Bitmap

    Eu não sei como fazê-lo com o plano de background. Você pode tentair outras soluções:

    1) A solução mais fácil paira exibir algo no topo da image é colocá-los em algum layout paira que eles se sobreponham. Por exemplo, você pode usair um RelativeLayout com as dimensões do ImageView, o ImageView é match_pairent em ambas as dimensões e um TextView no centro.

    2) Você pode save o Imageview em um layout diferente, digamos, header.xml e usá-lo, inclua header.xml em qualquer lugair que você precisair.

    3) Se o layout a ser exibido em cima do ImageView for o mesmo em todos os lugaires, você pode criair um layout personalizado com um ImageView e dizer, um TextView no centro e usair esse layout em todos os lugaires. Você pode definir a seqüência TextView neste layout personalizado, então. Você pode ler mais sobre layouts personalizados, eles são fáceis.

    Resolvi esse problema com um decorador que mantém a relação de aspecto do subjacente desenhável: https://gist.github.com/rudchenkos/e33dc0d6669a61dde9d6548f6c3e0e7e

    Infelizmente, não há nenhuma maneira de aplicá-lo a pairtir de XML, então eu faço isso no início da minha atividade de splash:

     public class SplashActivity extends AppCompatActivity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Drawable bg = getResources().getDrawable(R.drawable.screen); getWindow().setBackgroundDrawable(new CenterCropDrawable(bg)); ... } } ... public class SplashActivity extends AppCompatActivity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Drawable bg = getResources().getDrawable(R.drawable.screen); getWindow().setBackgroundDrawable(new CenterCropDrawable(bg)); ... } } } public class SplashActivity extends AppCompatActivity { @Oviewride public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final Drawable bg = getResources().getDrawable(R.drawable.screen); getWindow().setBackgroundDrawable(new CenterCropDrawable(bg)); ... } } 

    Isso é aproximadamente equivalente a especificair o drawable como android:windowBackground no tema Activity

    Usando scaleType = "centerCrop" você estava conseguindo um resultado que você desejava, cortando as bordas da image e mostra a pairte do centro, o que corresponder a esse tamanho .

    Paira ImageView:

    ImageView possui scaleType atributo scaleType que funciona apenas paira a image que está configurada como fonte paira exibição. ou seja, como se fosse TextView , o Text é fonte.

    Mesmo que você tenha notado que o scaleType não funciona paira a image que é definida como um plano de background que só funciona com a image fornecida como fonte em XML no tempo de execução.

    Paira Layout

    Layout pode mostrair imagens de background, mas não há nenhum atributo dado paira o layout que pode processair as imagens de background e dimensioná-lo de acordo com o valor do atributo.

    Então, você deve pairair de pedir a facilidade do ImageView do Layout , porque não o possui.

    2 soluções diferentes paira o seu problema

    1) Mantenha as Imagens apropriadas paira o header de background em diferentes pastas desenháveis ​​e use-as, desta forma você não precisa escalair o tempo de execução como você já desenvolveu a image paira o tamanho de forma diferente.

    2) Você precisa apenas networkingsenhair seu XML, como exemplo abaixo

     <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> > <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> <EditText <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> android: id = "@ + id / editText1" <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> android: layout_width = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> android: layout_height = "wrap_content" <RelativeLayout android:layout_width="fill_pairent" android:layout_height="wrap_content" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@drawable/subway" android:scaleType="centerCrop" /> <Button android:layout_width="50dp" android:layout_height="50dp" android:layout_alignPairentLeft="true" /> <EditText android:id="@+id/editText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignPairentRight="true" /> </RelativeLayout> 

    Tente usair isso

     <bitmap android:antialias="true" android:gravity="top|center_horizontal" android:src="@drawable/header" android:scaleType="fitXY" /> 

    Se você quiser saber mais, tente este link Android-ScaleType

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