溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android新浪微博圖片縮放效果怎么實現(xiàn)

發(fā)布時間:2022-03-29 16:32:29 來源:億速云 閱讀:232 作者:iii 欄目:移動開發(fā)

這篇文章主要講解了“android新浪微博圖片縮放效果怎么實現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“android新浪微博圖片縮放效果怎么實現(xiàn)”吧!

Android開發(fā)中有時會用到圖片縮放效果,即點擊圖片時顯示縮放按鈕,過一會消失。本文就根據(jù)新浪微博的圖片縮放給大家寫一個實例,以供參考。下面直接上代碼。

package com.Johnson.image.zoom;     import android.app.Activity;     import android.app.Dialog;     import android.app.ProgressDialog;     import android.content.DialogInterface;     import android.content.DialogInterface.OnKeyListener;     import android.graphics.Bitmap;     import android.graphics.BitmapFactory;     import android.graphics.Matrix;     import android.os.Bundle;     import android.os.Handler;     import android.util.DisplayMetrics;     import android.util.Log;     import android.view.KeyEvent;     import android.view.MotionEvent;     import android.view.View;     import android.view.View.OnClickListener;     import android.widget.ImageView;     import android.widget.LinearLayout;     import android.widget.RelativeLayout;     import android.widget.ZoomControls;     public class MainActivity extends Activity {             /** Called when the activity is first created. */       private final int LOADING_IMAGE = 1;       public static String KEY_IMAGEURI = "ImageUri";       private ZoomControls zoom;       private ImageView mImageView;       private LinearLayout layoutImage;       private int displayWidth;       private int displayHeight;       /**圖片資源*/       private Bitmap bmp;       /**寬的縮放比例*/       private float scaleWidth = 1;       /**高的縮放比例*/       private float scaleHeight = 1;       /**用來計數(shù)放大+1    縮小-1*/       private int    zoomNumber=0;       /**點擊屏幕顯示縮放按鈕,三秒消失*/       private int showTime=3000;       RelativeLayout rl;       Handler mHandler = new Handler();       private Runnable task = new Runnable() {         public void run() {           zoom.setVisibility(View.INVISIBLE);                 }       };             @Override             public void onCreate(Bundle savedInstanceState) {                     super.onCreate(savedInstanceState);                     setContentView(R.layout.main);         //showDialog(LOADING_IMAGE);         //圖片是從網(wǎng)絡上獲取的話,需要加入滾動條             bmp=BitmapFactory.decodeResource(getResources(), R.drawable.image);         //removeDialog(LOADING_IMAGE);              initZoom();     }       @Override       protected Dialog onCreateDialog(int id) {         switch (id) {         case LOADING_IMAGE: {           final ProgressDialog dialog = new ProgressDialog(this);           dialog.setOnKeyListener(new OnKeyListener() {             @Override             public boolean onKey(DialogInterface dialog, int keyCode,                 KeyEvent event) {               if (keyCode == KeyEvent.KEYCODE_BACK) {                 finish();               }               return false;             }           });           dialog.setMessage("正在加載圖片請稍后...");           dialog.setIndeterminate(true);           dialog.setCancelable(true);           return dialog;         }         }         return null;       }       public void initZoom() {         /* 取得屏幕分辨率大小 */         DisplayMetrics dm = new DisplayMetrics();         getWindowManager().getDefaultDisplay().getMetrics(dm);         displayWidth = dm.widthPixels;         displayHeight = dm.heightPixels;         mImageView = (ImageView) findViewById(R.id.myImageView);         mImageView.setImageBitmap(bmp);         layoutImage = (LinearLayout) findViewById(R.id.layoutImage);         mImageView.setOnClickListener(new OnClickListener() {           @Override           public void onClick(View v) {             // TODO Auto-generated method stub                                     /**                                     * 在圖片上和整個view上同時添加點擊監(jiān)聽捕捉屏幕                                     * 點擊事件,來顯示放大縮小按鈕                                        * */                    zoom.setVisibility(View.VISIBLE);             mHandler.removeCallbacks(task);             mHandler.postDelayed(task, showTime);           }         });         layoutImage.setOnClickListener(new OnClickListener() {           @Override           public void onClick(View v) {             // TODO Auto-generated method stub                         zoom.setVisibility(View.VISIBLE);             mHandler.removeCallbacks(task);             mHandler.postDelayed(task, showTime);           }         });         zoom = (ZoomControls) findViewById(R.id.zoomcontrol);         zoom.setIsZoomInEnabled(true);         zoom.setIsZoomOutEnabled(true);         // 圖片放大         zoom.setOnZoomInClickListener(new OnClickListener() {           public void onClick(View v) {             big();           }         });         // 圖片減小         zoom.setOnZoomOutClickListener(new OnClickListener() {           public void onClick(View v) {             small();           }         });         zoom.setVisibility(View.VISIBLE);         mHandler.postDelayed(task, showTime);       }       @Override       public boolean onTouchEvent(MotionEvent event) {         // TODO Auto-generated method stub              /**                     * 在圖片上和整個view上同時添加點擊監(jiān)聽捕捉屏幕                     * 點擊事件,來顯示放大縮小按鈕                        * */             zoom.setVisibility(View.VISIBLE);         mHandler.removeCallbacks(task);         mHandler.postDelayed(task, showTime);         return false;       }       @Override       public boolean onKeyDown(int keyCode, KeyEvent event) {         // TODO Auto-generated method stub         super.onKeyDown(keyCode, event);         return true;       }       /* 圖片縮小的method */       private void small() {         --zoomNumber;         int bmpWidth = bmp.getWidth();         int bmpHeight = bmp.getHeight();         Log.i("","bmpWidth = " + bmpWidth + ", bmpHeight = " + bmpHeight);         /* 設置圖片縮小的比例 */         double scale = 0.8;         /* 計算出這次要縮小的比例 */         scaleWidth = (float) (scaleWidth * scale);         scaleHeight = (float) (scaleHeight * scale);         /* 產(chǎn)生reSize后的Bitmap對象 */         Matrix matrix = new Matrix();         matrix.postScale(scaleWidth, scaleHeight);         Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,             matrix, true);         mImageView.setImageBitmap(resizeBmp);         /* 限制縮小尺寸 */         if ((scaleWidth * scale * bmpWidth < bmpWidth / 4             || scaleHeight * scale * bmpHeight > bmpWidth /4             || scaleWidth * scale * bmpWidth > displayWidth / 5             || scaleHeight * scale * bmpHeight > displayHeight / 5)&&(zoomNumber==-1) ){         zoom.setIsZoomOutEnabled(false);         } else {         zoom.setIsZoomOutEnabled(true);         }         zoom.setIsZoomInEnabled(true);         System.gc();       }       /* 圖片放大的method */       private void big() {         ++zoomNumber;         int bmpWidth = bmp.getWidth();         int bmpHeight = bmp.getHeight();         /* 設置圖片放大的比例 */         double scale = 1.25;         /* 計算這次要放大的比例 */         scaleWidth = (float) (scaleWidth * scale);         scaleHeight = (float) (scaleHeight * scale);         /* 產(chǎn)生reSize后的Bitmap對象 */         Matrix matrix = new Matrix();         matrix.postScale(scaleWidth, scaleHeight);         Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,             matrix, true);         mImageView.setImageBitmap(resizeBmp);         /* 限制放大尺寸 */         if (scaleWidth * scale * bmpWidth > bmpWidth * 4             || scaleHeight * scale * bmpHeight > bmpWidth * 4             || scaleWidth * scale * bmpWidth > displayWidth * 5             || scaleHeight * scale * bmpHeight > displayHeight * 5) {           zoom.setIsZoomInEnabled(false);         } else {           zoom.setIsZoomInEnabled(true);         }         zoom.setIsZoomOutEnabled(true);       System.gc();       }     }

布局文件如下:

  1.     <?xml version="1.0" encoding="utf-8"?>         

  2.     <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"         

  3.             android:orientation="vertical"         

  4.             android:layout_width="fill_parent"         

  5.             android:layout_height="fill_parent"         

  6.             android:id="@+id/layout1"         

  7.                 >         

  8.          <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"         

  9.                     android:layout_width="fill_parent"         

  10.                     android:layout_height="fill_parent"         

  11.                  android:id="@+id/rl"        

  12.                     >         

  13.             <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"                

  14.                     android:layout_width="fill_parent"         

  15.                     android:layout_height="fill_parent"            

  16.                     android:layout_weight="19"         

  17.                     android:scrollbars="none"         

  18.                     android:fadingEdge="vertical"     

  19.                     android:layout_gravity="center"        

  20.                     android:gravity="center"         

  21.                  >         

  22.             <HorizontalScrollView            

  23.                     android:layout_height="fill_parent"         

  24.                     android:layout_width="fill_parent"     

  25.                     android:scrollbars="none"     

  26.                      android:layout_gravity="center"        

  27.                     android:gravity="center"        

  28.                     android:id="@+id/hs"     

  29.                         >         

  30.                     <LinearLayout     

  31. android:orientation="horizontal"         

  32. android:layout_width="fill_parent"         

  33. android:layout_height="fill_parent"         

  34.                             android:id="@+id/layoutImage"        

  35.                             android:layout_gravity="center"        

  36.                             android:gravity="center"         

  37.                             >         

  38.                             <ImageView        

  39. android:layout_gravity="center"        

  40.                                 android:gravity="center"         

  41. android:id="@+id/myImageView"         

  42. android:layout_width="fill_parent"         

  43. android:layout_height="fill_parent"         

  44. android:layout_weight="19"         

  45. android:paddingTop="5dip"         

  46. android:paddingBottom="5dip"        

  47.                                     />         

  48.                     </LinearLayout>         

  49.             </HorizontalScrollView >         

  50.             </ScrollView>        

  51.                  <ZoomControls android:id="@+id/zoomcontrol"     

  52.           android:layout_width="wrap_content" android:layout_height="wrap_content"     

  53.           android:layout_centerHorizontal="true"     

  54.                 android:layout_alignParentBottom="true"     

  55.           >     

  56.         </ZoomControls>     

  57.             </RelativeLayout>         

  58.     </FrameLayout>      

感謝各位的閱讀,以上就是“android新浪微博圖片縮放效果怎么實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對android新浪微博圖片縮放效果怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI