您好,登錄后才能下訂單哦!
這篇文章主要講解了“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(); } }
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout1"
>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/rl"
>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="19"
android:scrollbars="none"
android:fadingEdge="vertical"
android:layout_gravity="center"
android:gravity="center"
>
<HorizontalScrollView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:scrollbars="none"
android:layout_gravity="center"
android:gravity="center"
android:id="@+id/hs"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layoutImage"
android:layout_gravity="center"
android:gravity="center"
>
<ImageView
android:layout_gravity="center"
android:gravity="center"
android:id="@+id/myImageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="19"
android:paddingTop="5dip"
android:paddingBottom="5dip"
/>
</LinearLayout>
</HorizontalScrollView >
</ScrollView>
<ZoomControls android:id="@+id/zoomcontrol"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
>
</ZoomControls>
</RelativeLayout>
</FrameLayout>
感謝各位的閱讀,以上就是“android新浪微博圖片縮放效果怎么實現(xiàn)”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對android新浪微博圖片縮放效果怎么實現(xiàn)這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。