List of usage examples for android.widget ImageView getLocationOnScreen
public void getLocationOnScreen(@Size(2) int[] outLocation)
Computes the coordinates of this view on the screen.
From source file:Main.java
public static Rect getBitmapRectFromImageView(ImageView imageView) { Drawable drawable = imageView.getDrawable(); Bitmap bitmap = null;/*from ww w .j av a 2s . c o m*/ if (drawable instanceof BitmapDrawable) { bitmap = ((BitmapDrawable) drawable).getBitmap(); } Rect rect = new Rect(); boolean isVisible = imageView.getGlobalVisibleRect(rect); if (!isVisible) { int[] location = new int[2]; imageView.getLocationOnScreen(location); rect.left = location[0]; rect.top = location[1]; rect.right = rect.left + imageView.getWidth(); rect.bottom = rect.top + imageView.getHeight(); } if (bitmap != null) { int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight(); int imageViewWidth = imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); int imageviewHeight = imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); float startScale; if ((float) imageViewWidth / bitmapWidth > (float) imageviewHeight / bitmapHeight) { // Extend start bounds horizontally startScale = (float) imageviewHeight / bitmapHeight; } else { startScale = (float) imageViewWidth / bitmapWidth; } bitmapHeight = (int) (bitmapHeight * startScale); bitmapWidth = (int) (bitmapWidth * startScale); int deltaX = (imageViewWidth - bitmapWidth) / 2; int deltaY = (imageviewHeight - bitmapHeight) / 2; rect.set(rect.left + deltaX, rect.top + deltaY, rect.right - deltaX, rect.bottom - deltaY); return rect; } else { return null; } }
From source file:com.ravi.apps.android.newsbytes.MainActivity.java
/** * Adds the thumbnail details into the intent extras. *///from ww w. j a va 2 s . c om private void addThumbnailDetailsToIntent(ImageView imageView, Intent intent) { // Get the thumbnail position. int[] loc = new int[2]; imageView.getLocationOnScreen(loc); float xPos = loc[0]; float yPos = loc[1]; // Get the thumbnail image as a byte array. byte[] imageByteArray = Utility.convertToByteArray(imageView); if (imageByteArray == null) { imageByteArray = new byte[0]; } // Add details into intent extras. intent.putExtra(IMAGE_XPOS, xPos); intent.putExtra(IMAGE_YPOS, yPos); intent.putExtra(IMAGE, imageByteArray); }
From source file:com.velli.passwordmanager.FragmentPasswords.java
@Override public void onCardClick(View view, Password entry, int position) { final Bundle bundle = new Bundle(); final FragmentPasswordDetails frag; final boolean creditCard = entry.isCreditCard(); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_ENTRY_ID, entry.getRowId()); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_TYPE, creditCard ? FragmentPasswordDetails.TYPE_CREDIT_CARD : FragmentPasswordDetails.TYPE_PASSWORD); final RobotoTextView title = (RobotoTextView) view .findViewById(creditCard ? R.id.credit_card_title : R.id.password_card_title); final ImageView icon = (ImageView) view .findViewById(creditCard ? R.id.credit_card_icon : R.id.password_card_icon); final boolean animate = PreferenceManager.getDefaultSharedPreferences(getActivity()) .getBoolean(getResources().getString(R.string.preference_key_show_animations), true); if (animate && title != null && icon != null) { int[] titlePoint = { 0, 0 }; int[] iconPoint = { 0, 0 }; title.getLocationOnScreen(titlePoint); icon.getLocationOnScreen(iconPoint); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_TITLE_Y_POS, titlePoint[1]); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_TITLE_X_POS, titlePoint[0]); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_ICON_Y_POS, iconPoint[1]); bundle.putInt(FragmentPasswordDetails.BUNDLE_KEY_ICON_X_POS, iconPoint[0]); bundle.putBoolean(FragmentPasswordDetails.BUNDLE_KEY_IS_GRID_LAYOUT_MANAGER, mIsGridLayoutManager); }//from w w w . ja va 2 s . c o m frag = new FragmentPasswordDetails(); frag.setArguments(bundle); frag.getEntry((entry.getRowId())); frag.setRetainInstance(true); mFab.hide(); if (!animate) { openFragment(frag, true, FragmentPasswordDetails.TAG); return; } openFragment(frag, !animate, FragmentPasswordDetails.TAG); }
From source file:com.github.colorchief.colorchief.MainActivity.java
private boolean clickInImage(int x, int y, ImageView imageView) { //ImageView imageViewer = (ImageView) findViewById(R.id.imageView); if (imageView.getVisibility() != View.VISIBLE) { return false; }/*from w w w . j a v a 2s. co m*/ int[] imageViewCoords = new int[2]; imageView.getLocationOnScreen(imageViewCoords); float[] imageViewMatrix = new float[9]; imageView.getImageMatrix().getValues(imageViewMatrix); float scaleX = imageViewMatrix[Matrix.MSCALE_X]; float scaleY = imageViewMatrix[Matrix.MSCALE_Y]; Bitmap bitmap = null; int bitmapWidth = 0; int bitmapHeight = 0; try { bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); bitmapWidth = bitmap.getWidth(); bitmapHeight = bitmap.getHeight(); } catch (NullPointerException npe) { Log.e(TAG, "Failed to extract Bitmap from ImageView: " + npe); } //assuming Bitmap is centred in imageViewer int scaledBitmapWidth = Math.round(bitmapWidth * scaleX); int scaledBitmapHeight = Math.round(bitmapHeight * scaleY); int xOffsetBitmap2imageViewer = (imageView.getWidth() - scaledBitmapWidth) / 2; int yOffsetBitmap2imageViewer = (imageView.getHeight() - scaledBitmapHeight) / 2; // get total bitmap offset vs. screen origin int xTotalOffset = imageViewCoords[0] + xOffsetBitmap2imageViewer; int yTotalOffset = imageViewCoords[1] + yOffsetBitmap2imageViewer; if ((x >= xTotalOffset) && (x <= xTotalOffset + scaledBitmapWidth) && (y >= yTotalOffset) && (y <= yTotalOffset + scaledBitmapHeight)) { return true; } else { return false; } }
From source file:com.github.colorchief.colorchief.MainActivity.java
private int[] clickImagePixelLocation(int x, int y, ImageView imageView) { int[] pixelLocation = new int[2]; //ImageView imageViewer = (ImageView) findViewById(R.id.imageView); //Bitmap bitmap = null; //Drawable displayedDrawable = null; int bitmapWidth; int bitmapHeight; try {/* ww w. ja va2 s. com*/ //bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); bitmapWidth = bitmapScaledOriginal.getWidth(); bitmapHeight = bitmapScaledOriginal.getHeight(); } catch (NullPointerException npe) { Log.e(TAG, "Failed to extract Bitmap from ImageView or " + "access width and height parameters: " + npe); pixelLocation[0] = pixelLocation[1] = 0; return pixelLocation; } float[] imageMatrixValues = new float[9]; imageView.getImageMatrix().getValues(imageMatrixValues); float scaleX = imageMatrixValues[Matrix.MSCALE_X]; float scaleY = imageMatrixValues[Matrix.MSCALE_Y]; int[] imageViewerLoc = new int[2]; imageView.getLocationOnScreen(imageViewerLoc); //assuming Bitmap is centred in imageViewer int xOffsetBitmap2imageViewer = (imageView.getWidth() - Math.round(bitmapWidth * scaleX)) / 2; int yOffsetBitmap2imageViewer = (imageView.getHeight() - Math.round(bitmapHeight * scaleY)) / 2; // get total bitmap offset vs. screen origin int xTotalOffset = imageViewerLoc[0] + xOffsetBitmap2imageViewer; int yTotalOffset = imageViewerLoc[1] + yOffsetBitmap2imageViewer; int xLocationScaledBitmap = x - xTotalOffset; int yLocationScaledBitmap = y - yTotalOffset; pixelLocation[0] = Math.round(xLocationScaledBitmap / scaleX); pixelLocation[1] = Math.round(yLocationScaledBitmap / scaleY); Log.d(TAG, "Pixel location x,y = " + Integer.toString(pixelLocation[0]) + ", " + Integer.toString(pixelLocation[1])); if (pixelLocation[0] < 0) pixelLocation[0] = 0; if (pixelLocation[0] > (bitmapWidth - 1)) pixelLocation[0] = (bitmapWidth - 1); if (pixelLocation[1] < 0) pixelLocation[1] = 0; if (pixelLocation[1] > (bitmapHeight - 1)) pixelLocation[1] = (bitmapHeight - 1); return pixelLocation; }
From source file:com.javielinux.tweettopics2.TweetTopicsActivity.java
public void refreshActionBarColumns() { int currentPosition = pager.getCurrentItem(); layoutBackgroundColumnsBar.removeAllViews(); int padding = (int) getResources().getDimension(R.dimen.default_padding); //int sizeButton = (int) getResources().getDimension(R.dimen.actionbar_columns_height); for (int i = 1; i < fragmentAdapter.getFragmentList().size(); i++) { ImageView view = new ImageView(this); view.setPadding(padding, padding, padding, padding); view.setImageBitmap(ColumnsUtils.getButtonWithTitle(this, fragmentAdapter.getFragmentList().get(i), true, currentPosition == i ? Color.GREEN : Color.BLACK)); view.setTag(i);//from www .j a v a2s . c o m view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (layoutMainOptionsColumns.getVisibility() != View.VISIBLE) { showActionBarIndicatorAndMovePager((Integer) view.getTag()); } } }); view.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { int pos = (Integer) view.getTag(); int[] loc = new int[2]; view.getLocationOnScreen(loc); showOptionsColumns(loc[0], pos, true); return false; } }); layoutBackgroundColumnsBar.addView(view); } }
From source file:com.google.android.apps.santatracker.rocketsleigh.RocketSleighActivity.java
private void processFrame() { long newTime = System.currentTimeMillis(); long time = newTime - mLastTime; boolean end = false; if (time > 60) { Log.e("LONG", "Frame time took too long! Time: " + time + " Last process frame: " + mLastFrameTime + " Count: " + mBackgroundCount + " Level: " + mLevel); }//w ww. j ava 2 s . c om // We don't want to jump too far so, if real time is > 60 treat it as 33. On screen will seem to slow // down instaead of "jump" if (time > 60) { time = 33; } // Score is based on time + presents. Right now 100 point per second played. No presents yet if (mLevel < 6) { mScore += time; } if (mIsTv) { mScoreText.setText(mScoreLabel + ": " + NumberFormat.getNumberInstance().format((mScore / 10))); } else { mScoreText.setText(NumberFormat.getNumberInstance().format((mScore / 10))); } float scroll = mElfVelX * time; // Do collision detection first... // The elf can't collide if it is within 2 seconds of colliding previously. if (mElfIsHit) { if ((newTime - mElfHitTime) > 2000) { // Move to next state. if (mElfState < 4) { mElfState++; AnalyticsManager.sendEvent(getString(R.string.analytics_screen_rocket), getString(R.string.analytics_action_rocket_hit), null, mElfState); if (mElfState == 4) { mSoundPool.play(mGameOverSound, 1.0f, 1.0f, 2, 0, 1.0f); // No more control... mControlView.setOnTouchListener(null); mElfAccelY = 0.0f; if (mJetThrustStream != 0) { mSoundPool.stop(mJetThrustStream); } } } updateElf(false); mElfIsHit = false; } } else if (mElfState == 4) { // Don't do any collision detection for parachute elf. Just let him fall... } else { // Find the obstacle(s) we might be colliding with. It can only be one of the first 3 obstacles. for (int i = 0; i < 3; i++) { View view = mObstacleLayout.getChildAt(i); if (view == null) { // No more obstacles... break; } int[] tmp = new int[2]; view.getLocationOnScreen(tmp); // If the start of this view is past the center of the elf, we are done if (tmp[0] > mElfPosX) { break; } if (RelativeLayout.class.isInstance(view)) { // this is an obstacle layout. View topView = view.findViewById(R.id.top_view); View bottomView = view.findViewById(R.id.bottom_view); if ((topView != null) && topView.getVisibility() == View.VISIBLE) { topView.getLocationOnScreen(tmp); Rect obsRect = new Rect(tmp[0], tmp[1], tmp[0] + topView.getWidth(), tmp[1] + topView.getHeight()); if (obsRect.contains((int) mElfPosX, (int) mElfPosY + mElfBitmap.getHeight() / 2)) { handleCollision(); } } if (!mElfIsHit) { if ((bottomView != null) && bottomView.getVisibility() == View.VISIBLE) { bottomView.getLocationOnScreen(tmp); Rect obsRect = new Rect(tmp[0], tmp[1], tmp[0] + bottomView.getWidth(), tmp[1] + bottomView.getHeight()); if (obsRect.contains((int) mElfPosX, (int) mElfPosY + mElfBitmap.getHeight() / 2)) { // Special case for the mammoth obstacle... if (bottomView.getTag() != null) { if (((mElfPosX - tmp[0]) / (float) bottomView.getWidth()) > 0.25f) { // We are over the mammoth not the spike. lower the top of the rect and test again. obsRect.top = (int) (tmp[1] + ((float) bottomView.getHeight() * 0.18f)); if (obsRect.contains((int) mElfPosX, (int) mElfPosY + mElfBitmap.getHeight() / 2)) { handleCollision(); } } } else { handleCollision(); } } } } } else if (FrameLayout.class.isInstance(view)) { // Present view FrameLayout frame = (FrameLayout) view; if (frame.getChildCount() > 0) { ImageView presentView = (ImageView) frame.getChildAt(0); presentView.getLocationOnScreen(tmp); Rect presentRect = new Rect(tmp[0], tmp[1], tmp[0] + presentView.getWidth(), tmp[1] + presentView.getHeight()); mElfLayout.getLocationOnScreen(tmp); Rect elfRect = new Rect(tmp[0], tmp[1], tmp[0] + mElfLayout.getWidth(), tmp[1] + mElfLayout.getHeight()); if (elfRect.intersect(presentRect)) { // We got a present! mPresentCount++; if (mPresentCount < 4) { mSoundPool.play(mScoreSmallSound, 1.0f, 1.0f, 2, 0, 1.0f); mScore += 1000; // 100 points. Score is 10x displayed score. mPlus100.setVisibility(View.VISIBLE); if (mElfPosY > (mScreenHeight / 2)) { mPlus100.setY(mElfPosY - (mElfLayout.getHeight() + mPlus100.getHeight())); } else { mPlus100.setY(mElfPosY + mElfLayout.getHeight()); } mPlus100.setX(mElfPosX); if (m100Anim.hasStarted()) { m100Anim.reset(); } mPlus100.startAnimation(m100Anim); } else { mSoundPool.play(mScoreBigSound, 1.0f, 1.0f, 2, 0, 1.0f); mScore += 5000; // 500 points. Score is 10x displayed score. if (!mRainingPresents) { mPresentCount = 0; } mPlus500.setVisibility(View.VISIBLE); if (mElfPosY > (mScreenHeight / 2)) { mPlus500.setY(mElfPosY - (mElfLayout.getHeight() + mPlus100.getHeight())); } else { mPlus500.setY(mElfPosY + mElfLayout.getHeight()); } mPlus500.setX(mElfPosX); if (m500Anim.hasStarted()) { m500Anim.reset(); } mPlus500.startAnimation(m500Anim); mPresentBonus = true; } frame.removeView(presentView); } else if (elfRect.left > presentRect.right) { mPresentCount = 0; } } } } } if (mForegroundLayout.getChildCount() > 0) { int currentX = mForegroundScroll.getScrollX(); View view = mForegroundLayout.getChildAt(0); int newX = currentX + (int) scroll; if (newX > view.getWidth()) { newX -= view.getWidth(); mForegroundLayout.removeViewAt(0); } mForegroundScroll.setScrollX(newX); } // Scroll obstacle views if (mObstacleLayout.getChildCount() > 0) { int currentX = mObstacleScroll.getScrollX(); View view = mObstacleLayout.getChildAt(0); int newX = currentX + (int) scroll; if (newX > view.getWidth()) { newX -= view.getWidth(); mObstacleLayout.removeViewAt(0); } mObstacleScroll.setScrollX(newX); } // Scroll the background and foreground if (mBackgroundLayout.getChildCount() > 0) { int currentX = mBackgroundScroll.getScrollX(); View view = mBackgroundLayout.getChildAt(0); int newX = currentX + (int) scroll; if (newX > view.getWidth()) { newX -= view.getWidth(); mBackgroundLayout.removeViewAt(0); if (view.getTag() != null) { Pair<Integer, Integer> pair = (Pair<Integer, Integer>) view.getTag(); int type = pair.first; int level = pair.second; if (type == 0) { if (mBackgrounds[level] != null) { mBackgrounds[level].recycle(); mBackgrounds[level] = null; } else if (mBackgrounds2[level] != null) { mBackgrounds2[level].recycle(); mBackgrounds2[level] = null; } } else if (type == 1) { if (mExitTransitions[level] != null) { mExitTransitions[level].recycle(); mExitTransitions[level] = null; } } else if (type == 2) { if (mEntryTransitions[level] != null) { mEntryTransitions[level].recycle(); mEntryTransitions[level] = null; } } } if (mBackgroundCount == 5) { if (mLevel < 6) { // Pre-fetch next levels backgrounds // end level uses the index 1 background... int level = (mLevel == 5) ? 1 : (mLevel + 1); BackgroundLoadTask task = new BackgroundLoadTask(getResources(), mLevel + 1, BACKGROUNDS[level], EXIT_TRANSITIONS[mLevel], // Exit transitions are for the current level... ENTRY_TRANSITIONS[level], mScaleX, mScaleY, mBackgrounds, mBackgrounds2, mExitTransitions, mEntryTransitions, mScreenWidth, mScreenHeight); task.execute(); addNextImages(mLevel, true); addNextObstacles(mLevel, 2); } // Fetch first set of obstacles if the next level changes from woods to cave or cave to factory if (mLevel == 1) { // Next level will be caves. Get bitmaps for the first 20 obstacles. ObstacleLoadTask task = new ObstacleLoadTask(getResources(), CAVE_OBSTACLES, mCaveObstacles, mCaveObstacleList, 0, 2, mScaleX, mScaleY); task.execute(); } else if (mLevel == 3) { // Next level will be factory. Get bitmaps for the first 20 obstacles. ObstacleLoadTask task = new ObstacleLoadTask(getResources(), FACTORY_OBSTACLES, mFactoryObstacles, mFactoryObstacleList, 0, 2, mScaleX, mScaleY); task.execute(); } mBackgroundCount++; } else if (mBackgroundCount == 7) { // Add transitions and/or next level if (mLevel < 5) { addNextTransitionImages(mLevel + 1); if (mTransitionImagesCount > 0) { addNextObstacleSpacer(mTransitionImagesCount); } addNextImages(mLevel + 1); // First screen of each new level has no obstacles if ((mLevel % 2) == 1) { addNextObstacleSpacer(1); addNextObstacles(mLevel + 1, 1); } else { addNextObstacles(mLevel + 1, 2); } } else if (mLevel == 5) { addNextTransitionImages(mLevel + 1); if (mTransitionImagesCount > 0) { addNextObstacleSpacer(mTransitionImagesCount); } addFinalImages(); } mBackgroundCount++; } else if (mBackgroundCount == 9) { // Either the transition or the next level is showing if (this.mTransitionImagesCount > 0) { mTransitionImagesCount--; } else { if (mLevel == 1) { // Destroy the wood obstacle bitmaps Thread thread = new Thread(new Runnable() { @Override public void run() { synchronized (mWoodObstacles) { for (Bitmap bmp : mWoodObstacles.values()) { bmp.recycle(); } mWoodObstacles.clear(); } } }); thread.start(); } else if (mLevel == 3) { // Destroy the cave obstacle bitmaps Thread thread = new Thread(new Runnable() { @Override public void run() { synchronized (mCaveObstacles) { for (Bitmap bmp : mCaveObstacles.values()) { bmp.recycle(); } mCaveObstacles.clear(); } } }); thread.start(); } else if (mLevel == 5) { // Destroy the factory obstacle bitmaps Thread thread = new Thread(new Runnable() { @Override public void run() { synchronized (mFactoryObstacles) { for (Bitmap bmp : mFactoryObstacles.values()) { bmp.recycle(); } mFactoryObstacles.clear(); } } }); thread.start(); } mLevel++; // Add an event for clearing this level - note we don't increment mLevel as // it's 0-based and we're tracking the previous level. AnalyticsManager.sendEvent(getString(R.string.analytics_screen_rocket), getString(R.string.analytics_action_rocket_level), null, mLevel); // Achievements if (!mHitLevel) { mCleanLevel = true; } mHitLevel = false; if (mLevel == 5) { mPlus100.setSelected(true); mPlus500.setSelected(true); } else if (mLevel == 6) { mPlus100.setSelected(false); mPlus500.setSelected(false); } if (mLevel < 6) { mSoundPool.play(mLevelUpSound, 1.0f, 1.0f, 2, 0, 1.0f); addNextImages(mLevel); addNextObstacles(mLevel, 2); } mBackgroundCount = 0; } } else { if ((mBackgroundCount % 2) == 1) { if (mLevel < 6) { addNextImages(mLevel); addNextObstacles(mLevel, 2); } } mBackgroundCount++; } } int current = mBackgroundScroll.getScrollX(); mBackgroundScroll.setScrollX(newX); if ((mLevel == 6) && (mBackgroundScroll.getScrollX() == current)) { end = true; } } // Check on the elf boolean hitBottom = false; boolean hitTop = false; float deltaY = mElfVelY * time; mElfPosY = mElfLayout.getY() + deltaY; if (mElfPosY < 0.0f) { mElfPosY = 0.0f; mElfVelY = 0.0f; hitTop = true; } else if (mElfPosY > (mScreenHeight - mElfLayout.getHeight())) { mElfPosY = mScreenHeight - mElfLayout.getHeight(); mElfVelY = 0.0f; hitBottom = true; } else { // Remember -Y is up! mElfVelY += (mGravityAccelY * time - mElfAccelY * time); } mElfLayout.setY(mElfPosY); // Rotate the elf to indicate thrust, dive. float rot = (float) (Math.atan(mElfVelY / mElfVelX) * 120.0 / Math.PI); mElfLayout.setRotation(rot); mElf.invalidate(); // Update the time and spawn the next call to processFrame. mLastTime = newTime; mLastFrameTime = System.currentTimeMillis() - newTime; if (!end) { if ((mElfState < 4) || !hitBottom) { if (mLastFrameTime < 16) { mHandler.postDelayed(mGameLoop, 16 - mLastFrameTime); } else { mHandler.post(mGameLoop); } } else { endGame(); } } else { // Whatever the final stuff is, do it here. mPlayPauseButton.setEnabled(false); mPlayPauseButton.setVisibility(View.INVISIBLE); endGame(); } }