Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 拖拽功能的使用實例

Android 拖拽功能的使用實例

編輯:關於Android編程

圖片的拖拉功能是處理圖片進一個有用且常用的功能,由於手機屏幕尺寸的限制,往往無法在手機上一次性的顯示一張比較大的圖片,也就是
說,我們在手機上一次性只能看到圖片的一部分,此時就可以使用圖片的拖動功能來拖動圖片,進而查看圖片相應的部分。
下面通過一個例子來學習實現圖片的拖拉功能:

實例運行如下:1.這初始化的界面。2.為向左拖動後的效果 3.為向上拖動的效果

\ \ \


知識點:
在anndroid應用程序開發中,我們經常使用ImageView時經常會用到scaleType屬性,如:


android:layout_height=wrap_content
android:scaleType=matrix
android:src=@drawable/s001 />


scaleType的屬性值有:matrix fitXY fitStart fitCenter fitEnd center centerCrop centerInside
它們之間的區別如下:
matrix 用矩陣來繪制(從左上角起始的矩陣區域)
fitXY 把圖片不按比例擴大/縮小到View的大小顯示(確保圖片會完整顯示,並充滿View)
fitStart 把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置(圖片會完整顯示)
fitCenter 把圖片按比例擴大/縮小到View的寬度,居中顯示(圖片會完整顯示)
fitEnd 把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置(圖片會完整顯示)
center 按圖片的原來size居中顯示,當圖片寬超過View的寬,則截取圖片的居中部分顯示,當圖片寬小於View的寬,則圖片居中顯示
centerCrop 按比例擴大/縮小圖片的size居中顯示,使得圖片的高等於View的高,使得圖片寬等於或大於View的寬
centerInside 將圖片的內容完整居中顯示,使得圖片按比例縮小或原來的大小(圖片比View小時)使得圖片寬等於或小於View的寬 (圖片會完整顯示)

新建一個名稱為DragAndDrop的Android工程,目錄結構如下:

\

主界面的activity_layout.xml的布局代碼如下:


    


讀者需要注意的是我們的ImageView的控制方式設置成了matrix這樣就可以在代碼中非常方便的對圖片進行控制了。
然後,我們把一張圖片(大小超過手機屏幕)的圖片放在drawable-mdpi文件中。
主Activity的代碼如下:MainActivity.java
package com.shen.draganddrop;

import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView  imageView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		imageView = (ImageView) findViewById(R.id.show_img);
		imageView.setOnTouchListener(new ImageTouchListener());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
	
	private class ImageTouchListener implements OnTouchListener
	{
		
		//聲明一個坐標點
		private PointF startPoint;
		//聲明並實例化一個Matrix來控制圖片
		private Matrix matrix = new Matrix();
		//聲明並實例化當前圖片的Matrix
		private Matrix mCurrentMatrix = new Matrix();
		
		@Override
		public boolean onTouch(View v, MotionEvent event) {
			switch (event.getAction()&MotionEvent.ACTION_MASK) {
			case MotionEvent.ACTION_DOWN:
				//獲得當前按下點的坐標
				startPoint = new PointF(event.getX(),event.getY());
				//把當前圖片的Matrix設置為按下圖片的Matrix
				mCurrentMatrix.set(imageView.getImageMatrix());
				break;
			case MotionEvent.ACTION_MOVE:
				//移動的x坐標的距離
				float dx = event.getX() - startPoint.x;
				//移動的y坐標的距離
				float dy = event.getY() - startPoint.y;
				//設置Matrix當前的matrix
				matrix.set(mCurrentMatrix);
				//告訴matrix要移動的x軸和Y軸的距離
				matrix.postTranslate(dx, dy);
				break;
			case MotionEvent.ACTION_UP:
				break;
			default:
				break;
			}
			//按照Matrix的要求移動圖片到某一個位置
			imageView.setImageMatrix(matrix);
			//返回true表明我們會消費該動作,不需要父控件進行進一步的處理
			return true;
		}
		
	}
}

 

下面是scaleType的屬性為同值的顯示效果:

1.fitXY 把圖片不按比例擴大/縮小到View的大小顯示(確保圖片會完整顯示,並充滿View)

\

2.fitStart 把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置(圖片會完整顯示)

\
3.fitCenter 把圖片按比例擴大/縮小到View的寬度,居中顯示(圖片會完整顯示)

\
4.fitEnd 把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置(圖片會完整顯示)

\
5.center 按圖片的原來size居中顯示,當圖片寬超過View的寬,則截取圖片的居中部分顯示,當圖片寬小於View的寬,則圖片居中顯示

\
6.centerCrop 按比例擴大/縮小圖片的size居中顯示,使得圖片的高等於View的高,使得圖片寬等於或大於View的寬

\
7.centerInside 將圖片的內容完整居中顯示,使得圖片按比例縮小或原來的大小(圖片比View小時)使得圖片寬等於或小於View的寬 (圖片會完整顯示)

\

總之,scaletype的種類分為三類matrix(默認)、fit-X類、和center類。matrix就不多說。fit-X類中,fitStart、fitCenter和fitEnd之間的都是根據需要使原圖改變對ImgView進行適應,按matrix進行繪制,但它們的區別在於基准不同。fitStart的基准為最上角的點(即matrix方式開始的點)fitCenter的基准點為中間的點(matrix方式中可以使圖片居中的點),而fitEnd的基准點為右下角的點(即matrix方式最後繪制點)。center類中,center、centerCrop、centerInside都是以原圖的幾何中心點和ImagView的幾何中心點為基准,且只繪制ImagView大小的圖像,不同的是是否保持原圖大小和繪圖的目標不同、采取的手段不同。

 

 

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