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

