Hi Kostya, I am not sure what is complicated here... I just want to place my progress bar in the exact location on my imageview. If do it 'hard coded' so i.e. the image is 200x400 and I place it 50px from left and 100px from bottom than it will be misplaced if the image is resized by android. Therefore I want to get new resized parameters so I can calculate my position dynamically not hard coded - it cannot be put more simple. I ahve now subclassed my ImageView on in the onMeasure I finally got the rescaled size. However inside that method I get null when I call:
myCustomTwistedProgressBar = ((CustomTwistedProgressBar) findViewById(R.id.progressBar)) Moreover I also need to get the screen density before placing my progress bar (I have different image sizes for different densities). So I am still stuck. I don't understand why is it soooooo difficult to get the rescaled dimensions of an imageView in android. Also one very strange thing is that my onMeasure is called a couple of times when the activity starts - first it seems that the image is spread (width and height are full screen values) and the 2nd time they are correct. W dniu środa, 26 września 2012 23:46:37 UTC+2 użytkownik Kostya Vasilyev napisał: > > 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 <adam.lich...@gmail.com <javascript:>> > >> 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 >> android-d...@googlegroups.com<javascript:> >> To unsubscribe from this group, send email to >> android-developers+unsubscr...@googlegroups.com <javascript:> >> 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 android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en