利用縮放因子進行圖片的放大縮小,效果圖以下
在實現過程當中如出現直接崩潰的狀況:在全局配置文件中加入android:largeHeap="true"便可解決問題,在文章最後有現成代碼
步驟:
1.佈局文件 android:scaleType="matrix"記得加上,否則沒有效果
2.控件實例化及處理機制的取代
3.進行邏輯處理,並利用Matrix進行圖片處理其中nowScale 及beforeScale爲自定義的float類型的全局變量!,具體見最後代碼**
代碼以下:
佈局文件android
<ImageView android:id="@+id/imgzoom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:scaleType="matrix" android:src="@drawable/myphoto" />
Java文件web
public class MainActivity extends Activity { private ImageView mImgzoom; private float beforeScale=1.0f;//以前的伸縮值 private float nowScale;//當前的伸縮值 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); myScale(); } private void initView() { mImgzoom = (ImageView) findViewById(R.id.imgzoom); } private void myScale(){ final ScaleGestureDetector scaleGestureDetector=new ScaleGestureDetector(this, new ScaleGestureDetector.OnScaleGestureListener() { @Override public boolean onScale(ScaleGestureDetector detector) { nowScale=detector.getScaleFactor()*beforeScale; //設置縮放的範圍 if (nowScale>3||nowScale<0.1){ beforeScale=nowScale; return true; } Log.i("Scale","nowScale="+nowScale); Matrix matrix=new Matrix(); matrix.setScale(nowScale,nowScale); Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.myphoto);//獲取圖片 bitmap=Bitmap.createBitmap(bitmap,0,0,bitmap.getWidth(),bitmap.getHeight(),matrix,true);//轉化成bitmap格式 mImgzoom.setImageBitmap(bitmap); beforeScale=nowScale;//保存上一次的縮放值! return false; } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true;//記得改爲ture; } @Override public void onScaleEnd(ScaleGestureDetector detector) { } }); mImgzoom.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { scaleGestureDetector.onTouchEvent(event); return true; } }); } }
本文同步分享在 博客「計蒙不吃魚」(CSDN)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。ide