2015-04-21 9 views

risposta

14

Android ImageView personalizzato per il ridimensionamento del ritaglio superiore del drawable contenuto.

import android.content.Context; 
import android.graphics.Matrix; 
import android.widget.ImageView; 

/** 
* ImageView to display top-crop scale of an image view. 
* 
* @author Chris Arriola 
*/ 
public class TopCropImageView extends ImageView { 

public TopCropImageView(Context context) { 
    super(context); 
    setScaleType(ScaleType.MATRIX); 
} 

@Override 
protected boolean setFrame(int l, int t, int r, int b) { 
    final Matrix matrix = getImageMatrix(); 

    float scale; 
    final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight(); 
    final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom(); 
    final int drawableWidth = getDrawable().getIntrinsicWidth(); 
    final int drawableHeight = getDrawable().getIntrinsicHeight(); 

    if (drawableWidth * viewHeight > drawableHeight * viewWidth) { 
     scale = (float) viewHeight/(float) drawableHeight; 
    } else { 
     scale = (float) viewWidth/(float) drawableWidth; 
    } 

    matrix.setScale(scale, scale); 
    setImageMatrix(matrix); 

    return super.setFrame(l, t, r, b); 
}   
} 

https://gist.github.com/arriolac/3843346

+0

funziona. grazie –

+0

come implementare questo. ho fatto una domanda su questo http://stackoverflow.com/questions/32359213/trying-to-use-custom-imageview-topcrop-in-android-but-the-the-app-stops. –

+0

@Jay funziona benissimo. Sto facendo calcoli a matrice nel metodo onLayout(), che viene chiamato anche a rotazione, dove setFrame no. – box

1

Io non credo di avere bisogno di un personalizzato di vista per questo. Tutto quello che devi fare è impostare scaleType su matrix e impostare una matrice personalizzata su ImageView.

consultare: https://stackoverflow.com/a/38049348/4747587

3

Volevo solo una soluzione temporanea senza lavoro in eccesso. Prova questo

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scaleType="centerCrop" 
    android:scrollY="-100dp" 
    android:id="@+id/poster" 
    /> 

scrolly tira la vostra immagine su o giù. Provalo con diversi dp e troverai la taglia giusta.

+0

Mentre questo raggiunge l'operazione in corso, non funziona con risoluzioni dello schermo diverse o con dimensioni di visualizzazione padre. Probabilmente non è raccomandato per la produzione, poiché otterrai risultati imprevisti in natura. :) – DoctorD

+0

Sì, è vero, l'ho imparato nel modo più duro. Si comporta in modo diverso su vari schermi. – rahulxyz

Problemi correlati