Het formaat van Figuurweergave met Afbeelding passen

stemmen
0

Het is een beetje moeilijk uit te leggen, maar slecht probeer het anyways.

Im het weergeven van een afbeelding binnen een Figuurweergave wordt de ImageView ingesteld op 50% gebruik van de ScreenHeight met behulp van gewicht attribuut.

Nu, als de ImageAspectRatio doesnt passen bij de verhouding van de ImageView, ik heb een lege ruimte aan de onderkant en onTop van de Figuurweergave.

In principe wil ik mijn ImageView een maxSize dat is 50% van de ScreenHeight, maar krimpen in de hoogte als de afbeelding in het doesnt gebruiken de volledige hoogte, of op zijn minst verplaatsen naar de top van de Figuurweergave.

Dus, wat ik deed hier is dat ik stel het oog op de maximale grootte, en ik stel het de manier waarop de Figuurweergave normaal zou doen. Na dat ik weg voor de ImageView de lay-out, dan krijg de hoogte, als dat is de maximale hoogte wil ik de View te hebben.

Dan bereken ik de Scaling ik nodig om toe te passen. Ik schaal van de Beeld en stel het oog op de inhoud Wikkel aangezien het de standpunten zou moeten hebben vorige hoogte als een begrenzende.

Nu, dit werkt prima op een Samsung GT-I9000 running CyagenoMod (Android 4.2.2) ook geprobeerd dit op een Kindle HD. Maar bij het doen van het zelfde op een Nexus 4 (Android 4.3) lijkt alles wat ik doe negeren.

Daarmee bedoel ik, lijkt het beeld op de juiste schaal (imageHeight na iets als 53x schaalvergroting), maar het beeld duurt bijna het hele scherm. Ik begrijp waarom het werkt op de andere 2 apparaten, maar op de Nexus.

Is er een nieuwe API met betrekking tot ImageView voor Android 4.3 i dont know over?

@Override
public void setImageResource(final int resId) {
    //      this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 0.5f));
    super.setImageResource(resId);

    getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {

        @Override
        public boolean onPreDraw() {
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resId);

            int width = bitmap.getWidth();
            int height = bitmap.getHeight();
            int boundingY = getHeight();
            int boundingX = getWidth();

            float xScale = ((float) boundingX) / width;
            float yScale = ((float) boundingY) / height;

            float scale = (xScale <= yScale) ? xScale : yScale;

            Matrix matrix = new Matrix();
            matrix.postScale(scale, scale);

            Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);

            MyImageView.this.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT ));

            MyImageView.super.setImageBitmap(scaledBitmap);

            getViewTreeObserver().removeOnPreDrawListener(this);
            return true;
        }
    });
}

Ok hier is een beeld van wat im proberen te doen / te doen.

resizingImageView

Denk aan de blauwige ding de grootte van de ImageView, en de Zwarte rechthoek, de werkelijke grootte van de afbeelding. De Blauw maat is wat ik krijg, als ik de grootte van de ImageView tot breedte = matchParent en height = 0 met een gewicht van 0,5. Dit is de MAX Hoogte ik wil mijn Figuurweergave hebben.

Nu is het mogelijk dat het beeld heeft een breedte van> = breedte van de Figuurweergave. In dat geval, ik wil de Hoogte vergroten of verkleinen, om de hoogte van het beeld passen, dus ik de grootte van het beeld, te vinden binnen die grenzen en zet de afbeelding om WrapContent als het beeld is de exacte grootte ik wil het bekijken zijn.

Maar dit is ook mogelijk voor een afbeelding. 2 * width = hoogte Dan wil ik niet de ImageView om iets te doen. Handhaaf alleen haar maximale hoogte en geven de give Image.

Dit werkt, zoals ik reeds op sommige apparaten, GT-I9000 en Amazon Kindle HD gezegd, maar op een Nexus 4 de beelden die een veel grotere hoogte hebben dan breedte hebben de neiging om het hele verdomde scherm in beslag nemen.

Ik debugged dit en opgehaald ImageViewHeight en BitmapHeight. Beide verklaarde dat het beeld en het ImageView is 534 PX hoog.

Ik begrijp waarom ik werkt op de 2 andere apparaten, maar niet op de nexus.

<include layout=@layout/own_action_bar />

<*.view.MyImageView
    android:id=@+id/drawFragment_iv
    android:layout_width=match_parent
    android:layout_height=0dp
    android:layout_weight=0.5
    android:adjustViewBounds=true
    android:contentDescription=@string/hello />

<RelativeLayout
    android:layout_width=match_parent
    android:layout_height=0dp
    android:layout_weight=0.5 >
something in here
<RelativeLayout/>
<LinearLayout/>
De vraag is gesteld op 14/10/2013 om 11:23
bron van user
In andere talen...                            


1 antwoorden

stemmen
0

roepen setBackgroundResourcein plaats van setImageResourceop uw ImageView object en het zal het beeld naar de Figuurweergave passen schalen.

Hoewel het niet een efficiënte manier ti dit te bereiken, maar als niet veel van dergelijke ImageViews niet hebben, moeten dit doen de truc.

antwoordde op 08/01/2014 om 19:11
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more