国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)通過(guò)手勢(shì)控制圖片大小縮放的方法

2019-12-12 05:00:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Android實(shí)現(xiàn)通過(guò)手勢(shì)控制圖片大小縮放的方法。分享給大家供大家參考,具體如下:

該程序?qū)崿F(xiàn)的是通過(guò)手勢(shì)來(lái)縮放圖片,從左向右揮動(dòng)圖片時(shí)圖片被放大,從右向左揮動(dòng)圖片時(shí)圖片被縮小,揮動(dòng)速度越快,縮放比越大。程序思路如下:在界面中定義一個(gè)ImageView來(lái)顯示圖片,使用一個(gè)GestureDetector來(lái)檢測(cè)用戶的手勢(shì),并根據(jù)用戶的手勢(shì)在橫向的速度來(lái)縮放圖片。

在介紹這個(gè)實(shí)例前,先介紹一下Android中處理手勢(shì)觸摸事件的大概框架。

一、添加語(yǔ)句實(shí)現(xiàn)OnGestureListener手勢(shì)監(jiān)聽(tīng)器,代碼如下:

public classGestureZoom extends Activity implements OnGestureListener

二、定義一個(gè)手勢(shì)監(jiān)聽(tīng)器的全局實(shí)例,并在onCreate函數(shù)中對(duì)其進(jìn)行初始化,代碼如下:

GestureDetector detector;@Overridepublic void onCreate(Bundle savedInstanceState){  ... ...  detector = new GestureDetector(this);}

三、重寫(xiě)onTouchEvent函數(shù),把本Activity的觸摸事件交給GestureDetector處理,代碼如下:

@Overridepublic boolean onTouchEvent(MotionEvent me){  return detector.onTouchEvent(me);}

四、重寫(xiě)你需要監(jiān)聽(tīng)的手勢(shì)的函數(shù),默認(rèn)包括如下幾種手勢(shì):

BooleanonDown(MotionEvent e):按下。
BooleanonFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):拖過(guò)、滑動(dòng)。
abstract voidonLongPress(MotionEvent e):長(zhǎng)按。
BooleanonScroll(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY):滾動(dòng)。
voidonShowPress(MotionEvent e):按下且未移動(dòng)和松開(kāi)。
BooleanonSingleTapUp(MotionEvent e):輕擊。

這幾種手勢(shì)是系統(tǒng)默認(rèn)提供的,根據(jù)描述大家可能還是不太明確這幾種手勢(shì),最好的方法就是大家可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的程序?qū)嶒?yàn)一下就明白了。當(dāng)然,除了這些默認(rèn)的手勢(shì),也可以自行添加手勢(shì),篇幅有限就不再贅述了。

接下來(lái)給出通過(guò)滑動(dòng)來(lái)實(shí)現(xiàn)圖片縮放的實(shí)例,對(duì)比上面給出的基本框架,其實(shí)就是重寫(xiě)了onFling函數(shù),在其中定義了如何處理滑動(dòng)事件。

首先定義除了手勢(shì)監(jiān)聽(tīng)器外一些全局對(duì)象,并在onCreate函數(shù)中做相應(yīng)的初始化:

GestureDetectordetector;ImageViewimageView;Bitmap bitmap;//保存圖片資源int width,height;// 記錄圖片的寬、高floatcurrentScale = 1;// 記錄當(dāng)前的縮放比Matrix matrix;//控制圖片縮放的Matrix對(duì)象@Overridepublic voidonCreate(Bundle savedInstanceState){    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    detector = new GestureDetector(this);    imageView = (ImageView)findViewById(R.id.show);    matrix = new Matrix();    bitmap =BitmapFactory.decodeResource(this.getResources(), <你的圖片資源>);//獲取被縮放的源圖片,因?yàn)椴荒軐?duì)原有圖片進(jìn)行修改,所以必須轉(zhuǎn)化為位圖    width = bitmap.getWidth();    height = bitmap.getHeight();    imageView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), <你的圖片資源>));//設(shè)置ImageView初始化時(shí)顯示的圖片}

一、觸摸時(shí)間綁定手勢(shì)監(jiān)聽(tīng)器,和前面是一樣的,就不再貼代碼了。

二、重寫(xiě)onFling函數(shù):

@Overridepublicboolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY){   velocityX = velocityX > 4000 ? 4000 :velocityX;   velocityX = velocityX < -4000 ? -4000: velocityX;   //根據(jù)手勢(shì)的速度來(lái)計(jì)算縮放比,如果velocityX>0,放大圖像,否則縮小圖像。   currentScale += currentScale * velocityX/ 4000.0f;   //保證currentScale不會(huì)等于0   currentScale = currentScale > 0.01 ?currentScale : 0.01f;   // 重置Matrix   matrix.reset();   // 縮放Matrix   matrix.setScale(currentScale,currentScale , 160 , 200);   BitmapDrawable tmp = (BitmapDrawable)imageView.getDrawable();   //如果圖片還未回收,先強(qiáng)制回收該圖片   if (!tmp.getBitmap().isRecycled())   {       tmp.getBitmap().recycle();   }   // 根據(jù)原始位圖和Matrix創(chuàng)建新圖片   Bitmap bitmap2 =Bitmap.createBitmap(bitmap       ,0, 0, width, height, matrix, true);   // 顯示新的位圖   imageView.setImageBitmap(bitmap2);   return true;}

布局文件僅僅添加了一個(gè)ImageView控件,大家自己畫(huà)一下。在這里沒(méi)有截圖,因?yàn)榻貓D也看不出效果,大家就自己試試吧。好了,至此就實(shí)現(xiàn)了通過(guò)手勢(shì)滑動(dòng)來(lái)實(shí)現(xiàn)圖片縮放,以上內(nèi)容學(xué)習(xí)自瘋狂Android一書(shū)。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android圖形與圖像處理技巧總結(jié)》、《Android視圖View技巧總結(jié)》、《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android調(diào)試技巧與常見(jiàn)問(wèn)題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 汝南县| 门源| 吉木萨尔县| 右玉县| 清水河县| 亚东县| 襄樊市| 永城市| 竹山县| 青岛市| 合阳县| 茂名市| 深州市| 光山县| 新丰县| 陇西县| 梨树县| 云霄县| 宜章县| 自贡市| 丹棱县| 黄大仙区| 边坝县| 漯河市| 岳西县| 龙州县| 临湘市| 宁都县| 丰镇市| 蓝田县| 咸丰县| 忻州市| 莱芜市| 丹寨县| 阿拉善盟| 肥东县| 桦甸市| 清原| 徐闻县| 富锦市| 永宁县|