Not sure what your requirements are, but the code below seems way too
complicated to me.

Subclass ViewGroup, draw the image in onDraw, override onMeasure / onLayout
and position the progress bar (or skip the drawing and add an image view as
a child... you'd need to position it too...)

-- K

2012/9/26 Serdel <[email protected]>

> The problem with properly handling multiple screen sizes on Android has
> been talked all over thousands of times. However I couldn't find a solution
> to m problem. In a nutshell I need to align my custom progress bar over an
> imageView. I've got 3 set of drawables for the imageView - ldpi(scaled for
> 240x400), mdpi(scaled for 320x480), hdpi(scaled for 480x800). I align my
> custom view in Java with the following code:
>
>     //get screen density
>        float density = 
> getBaseContext().getResources().getDisplayMetrics().density;
>
>        //set the progress bar position according to screen density
>        if ( density == 1.0f)
>        {
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             // Get current dimensions
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new LayoutParams((int)(height/13.94), 
> (int)(height/13.94));
>             params.setMargins((int)(width/2.30), 0, 0, (int)(height/2.75));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }else if ( density == 1.5f ){
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new 
> LayoutParams((int)Math.round(height/14.13), (int)Math.round(height/14.13));
>             params.setMargins((int)Math.round( width/2.27), 0, 0, 
> (int)Math.round(height/2.91));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }else if ( density == 0.75f ){
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             // Get current dimensions
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new LayoutParams((int)(height/14.88), 
> (int)(height/14.88));
>             params.setMargins((int)(width/2.27), 0, 0, (int)(height/2.69));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }
>
>
>   The problem with properly handling multiple screen sizes on Android has
> been talked all over thousands of times. However I couldn't find a solution
> to m problem. In a nutshell I need to align my custom progress bar over an
> imageView. I've got 3 set of drawables for the imageView - ldpi(240x400),
> mdpi(320x480), hdpi(480x800). I align my custom view in Java with the
> following code:
>
>         //get screen density
>        float density = 
> getBaseContext().getResources().getDisplayMetrics().density;
>
>        //set the progress bar position according to screen density
>        if ( density == 1.0f)
>        {
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             // Get current dimensions
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new LayoutParams((int)(height/13.94), 
> (int)(height/13.94));
>             params.setMargins((int)(width/2.30), 0, 0, (int)(height/2.75));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }else if ( density == 1.5f ){
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new 
> LayoutParams((int)Math.round(height/14.13), (int)Math.round(height/14.13));
>             params.setMargins((int)Math.round( width/2.27), 0, 0, 
> (int)Math.round(height/2.91));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }else if ( density == 0.75f ){
>            ImageView micImage = ((ImageView) findViewById(R.id.imageViewClk));
>            Drawable drawing = micImage.getDrawable();
>             Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap();
>
>             // Get current dimensions
>             int width = bitmap.getWidth();
>             int height = bitmap.getHeight();
>
>             LayoutParams params = new LayoutParams((int)(height/14.88), 
> (int)(height/14.88));
>             params.setMargins((int)(width/2.27), 0, 0, (int)(height/2.69));
>
>             params.addRule(RelativeLayout.ALIGN_LEFT,R.id.imageViewClk);
>             params.addRule(RelativeLayout.ALIGN_BOTTOM,R.id.imageViewClk);
>             myCustomTwistedProgressBar.setLayoutParams(params);
>        }
>
> Everything worked fined on different screen sizes however when I tried to
> check on 480x854 resolution the vertical alignment of the custom view was
> incorrect. Checked with 480x800 on the same screen size and it again works.
> I than went for a big jump and checked in GalaxyTab and the horizontal and
> vertical alignments were wrong. Now my first though was that the bitmap
> width and height were the one of the image not the actual resized
> imageview. So I spent a lot of time on trying to get the real size of the
> imageview and even went for viewTreeObserver but the results were all the
> same - the correct, unchanged (unscaled?) bitmap size. So being positive
> that the problem is not here I couldn't get through further. I see 2
> options here:
>
> -either I still can't get the true 'real' size of the imageview (although
> I think I have ruled this out by checking the size by adding listeners to
> biewTreeObserver)
> -or, although I get the right size and calculate the alignment parameters
> correctly, they are somehow 'incorrectly' (differently) used in the layout.
>
>
> Does anyone have an idea why the alignment is not working correctly?
>
> PS: as for the image view in layout xml file I have 2 configurations for
> long and notlong but this image has the same description in both:
>
> <ImageView
>  android:src="@drawable/cloking"
>  android:id="@+id/imageViewClk"
>  android:layout_height="wrap_content"
>  android:layout_width="wrap_content"
>  android:layout_centerHorizontal="true"
>  android:layout_above="@+id/imageViewProcess"
>  android:adjustViewBounds="true"
>  android:cropToPadding="false"
>  android:layout_marginTop="60dp"
>  android:scaleType="fitXY">
> </ImageView>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to