Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習記錄UI篇-----imageView實現圖片的旋轉和縮放

android學習記錄UI篇-----imageView實現圖片的旋轉和縮放

編輯:關於Android編程

感覺在代碼中寫出解析會比較好看,我直接在程序代碼中解析所用的方法吧。


MainActivity:

package com.example.imageview_demo03;

import android.support.v7.app.ActionBarActivity;
import android.util.DisplayMetrics;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.SeekBar.OnSeekBarChangeListener;

@SuppressLint("NewApi")
public class MainActivity extends ActionBarActivity implements OnSeekBarChangeListener{
	//最小的縮放寬度
	private int minWidth = 80;
	private ImageView imageView;
	private SeekBar seekBar1;
	private SeekBar seekBar2;
	private TextView textView1;
	private TextView textView2;
	//矩陣類,用於對圖像進行旋轉
	private Matrix matrix = new Matrix();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView)findViewById(R.id.imageView);
		seekBar1 = (SeekBar)findViewById(R.id.seekBar1);
		seekBar2 = (SeekBar)findViewById(R.id.seekBar2);
		seekBar1.setOnSeekBarChangeListener(this);
		seekBar2.setOnSeekBarChangeListener(this);
		textView1 = (TextView)findViewById(R.id.textview1);
		textView2 = (TextView)findViewById(R.id.textview2);
		//創建一個空的展示矩陣,用於存儲當前屏幕信息,如大小。
		DisplayMetrics displayMetrics = new DisplayMetrics();
		//把當前管理的屏幕尺寸傳遞給displayMetrics
		getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
		//設置放大的最大值不超過屏幕大小
		seekBar1.setMax(displayMetrics.widthPixels-minWidth);
	}

	@Override
	public void onProgressChanged(SeekBar seekBar, int progress,
			boolean fromUser) {
		if (seekBar.getId()==R.id.seekBar1) {
			//設置寬度為80到最大
			int mwidth = progress+minWidth;
			int mheight = (int)(2*mwidth/3);
			//設置imageView的輸出大小參數
			//因為圖片是fitcenter參數,所以圖片會隨著image框架的大小變化而變化
			//從而改變image框架的大小會引起圖片大小的變化,實現圖片的放大縮小功能
			imageView.setLayoutParams(new LinearLayout.LayoutParams(mwidth, mheight));
			textView1.setText("圖片寬度:"+mwidth+"\t圖片高度:"+mheight);
		}else if (seekBar.getId()==R.id.seekBar2) {
			//imageView自身的setRotation方法是繞圖的中心順時針防線旋轉
			//同時該旋轉不會改變imageView的輸出大小,所超出imageView的部分會照常顯示在所跨越視圖的下方
			//imageView.setRotation(progress);
			
			//如果想創建一個不超出imageView輸出框架的旋轉圖像,那麼需要把原圖像取出,把原圖像進行旋轉,重新放入到imageView中
			//缺陷:占用系統較多的內存,會比較卡
			Bitmap bitmap = ((BitmapDrawable)(getResources().getDrawable(R.drawable.photo))).getBitmap();
			matrix.setRotate(progress);
			bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
			imageView.setImageBitmap(bitmap);
			textView2.setText("圖片旋轉"+progress+"度");
		}
		
	}

	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		// TODO Auto-generated method stub
		
	}
}

xml:



    

    

    

    

    


運行圖例:


如果文中有不妥或你有更好的方法,歡迎交流。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved