1. 程式人生 > >Android實現手指滑動控制元件縮放

Android實現手指滑動控制元件縮放

ImageView設定手指滑動縮放

本來就是我平時的兩篇練習,但是昨天看了一下感覺其實還挺有用的.就把他拿出了獻醜了,還有另外一篇關於控制元件抖動效果的部落格大家可以關注.

實現步驟

1, imageview設定scaletype為 android:scaleType=”matrix”

2, 設定imageview的setOnTouchListener,重寫裡面的程式碼

3, 新建一個matrix,
matrix.postScale(scale,scale,縮放中心,縮放中心);
image.setImageMatrix(matrix);

這樣image的大小就會改變了.

需要注意的幾點是 imageview一定要設定scaletype為matrix,否則圖片不能進行縮放.而且Bitmap也可以通過Matrix改變大小.

也可以用自定義控制元件imageview,重寫裡面的onTouchEvent,本文就是用的自定義控制元件得到方式實現的.

程式碼

自定義控制元件的程式碼,主要是重寫的onTouchEvent的程式碼

package com.test.administrator.imageviewscale;

import android.content.Context;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.renderscript.Float2;
import android.renderscript.Float4;
import android.util.AttributeSet;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.widget.ImageView;

/**
 * Created by Administrator on 2016/3/21.
 */
public class MyImageView extends ImageView {
private PointF centerPoint;
private float firstdistance;
private Matrix matrix;

public MyImageView(Context context) {
super(context);
initParams();
}

private void initParams() {
matrix = new Matrix();
setImageMatrix(matrix);
}

public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
initParams();
}

public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initParams();
}



@Override
public boolean onTouchEvent(MotionEvent event) {
int count = event.getPointerCount();
if(count == 1){
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("actiondown 1----");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("actionmove 1----");
break;
case MotionEvent.ACTION_UP:
System.out.println("actionup 1----");
break;
default:
break;
}
}else if(count == 2){
switch (event.getAction()&MotionEvent.ACTION_MASK){
case MotionEvent.ACTION_POINTER_DOWN:
 firstdistance = getDistance(event);
centerPoint = getCenterPoint(event);
System.out.println("actiondown 2===");
break;
case MotionEvent.ACTION_MOVE:
float distance = getDistance(event);
float scale = distance / firstdistance;
matrix.postScale(scale,scale,centerPoint.x,centerPoint.y);
setImageMatrix(matrix);
System.out.println(scale + "====");
firstdistance = distance;
System.out.println("actionmove 2===");
break;
case MotionEvent.ACTION_UP:

break;
default:
break;
}
}


return true;
}

/**
 * 獲取兩個點的中心點座標
 * @param event
 */
private PointF getCenterPoint(MotionEvent event) {
PointF point = new PointF();
point.x = (event.getX()+event.getX(1))/2;
point.y = (event.getY()+event.getY(1))/2;
return point;
}

/**
 * 兩根手指時手指間的距離
 * @param event
 */
private float getDistance(MotionEvent event) {
float x1 = event.getX();
float y1 = event.getY();

float x2 = event.getX(1);
float y2 = event.getY(1);
float distance = (float) Math.sqrt((x1 - x2)*(x1 - x2)+(y1 - y2)*(y1- y2));

return distance;
}
}

imageview的程式碼

<com.test.administrator.imageviewscale.MyImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:scaleType="matrix"
   android:src="@drawable/qq" />

相關推薦

Android實現手指滑動控制元件

ImageView設定手指滑動縮放 本來就是我平時的兩篇練習,但是昨天看了一下感覺其實還挺有用的.就把他拿出了獻醜了,還有另外一篇關於控制元件抖動效果的部落格大家可以關注. 實現步驟 1, imageview設定scaletype為 android:s

Android實現顏色選擇控制元件

Android實現顏色選擇控制元件 一、實現效果 二、使用方式 三、設計目標 四、程式碼分析 1. 控制元件佈局結構 2. 定義`CircleColorButton` 3. 核心屬性

控制元件

#region zhj-2018-11-19 #region 控制元件縮放 double formWidth;//窗體原始寬度 double formHeight;//窗體原始高度 double scaleX;//水平縮放比例

Android實現監聽控制元件點選事件

Android實現監聽控制元件點選事件 引言          這篇文章主要想寫一下Android實現監聽點選事件的幾種方法,Activity和Fragment實現起來有些方法上會有些不同,這裡也略做介紹。     &nbs

OpenGL ES2.0實現手指滑動平移、雙指Android

主要是實現了手指在螢幕上滑動實現平移,兩個手指進行縮放。主要是這部分矩陣還挺麻煩的。 效果圖如下所示: 核心部分程式碼如下 觸控事件處理: @SuppressLint("ClickableViewAccessibility") @Override

viewPager+photoView實現圖片輪播和手勢功能 支援手勢的imageView 如何實現相簿左右滑動和手勢 如何讓圖片自適應控制元件大小 photoView如何使用(上)

import uk.co.senab.photoview.IPhotoView; import uk.co.senab.photoview.PhotoViewAttacher; import uk.co.senab.photoview.PhotoViewAttacher.OnMatrixChangedList

Android】自定義控制元件實現滑動的開關(switch)

介紹 昨天晚上寫了一個Android的滑動開關, 即SlideSwitch。效果如下: 實現 實現的思路其實很簡單,監聽控制元件上的touch事件,並不斷重新整理,讓滑塊在手指的位置上繪出,達到滑塊跟著手指滑動的顯示效果。 先看一下程式碼

Android 5.x新增控制元件之--TabLayout實現左右滑動導航選單

1.效果圖(用來和Viewpager結合使用來作為Viewpager的選項卡。) 2.使用方式 builde.gride檔案中新增下面的依賴,compile'com.android.support:design:22.2.0'//可修改版本號為對應的buildToolsV

安卓觸控手勢事件實現圖片跟著手指移動和圖片

效果如下: 佈局程式碼: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

安卓開發學習筆記(五):史上最簡單且華麗地實現Android Stutio當中Webview控制元件https/http協議的方法

一.我們先在XML當中自定義一個webview(Second_layout.xml) 程式碼如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.an

一個Android文字輪播控制元件實現了可垂直跑、可水平跑的跑馬燈

Android文字輪播控制元件 現在的絕大數APP特別是類似淘寶京東等這些大型APP都有文字輪播介面,實現迴圈輪播多個廣告詞等功能;這種控制元件俗稱“跑馬燈”,而TextBannerView已經實現了可垂直跑、可水平跑的跑馬燈了。 效果圖 Attribute

Android開發自定義控制元件實現一個圓形進度條【帶數值和動畫】

實現一個如下圖所示的自定義控制元件,可以直觀地展示某個球隊在某個賽季的積分數和勝場、負場、平局數 首先對畫布進行區域劃分,整個控制元件分上下兩部分 上邊是個大的圓環,圓環中間兩行文字,沒什麼難度,選好圓心座標和半徑後直接繪製即可,繪製文字也是如此。 下部分是三個小的圓弧進

Android點選文字編輯進行、移動和改變字型、顏色的實現

實現效果如下: 需求功能點包含: 1:介面的文字為動態新增; 2:點選介面中的文字,開啟編輯模式:可編輯文字內容,可設定字型顏色,字型型別,粗體及對齊等; 3:點選刪除從介面上清除文字塊; 4:拖動編輯模式下的文字塊的四個錨點,可以按文字中心位置縮放,同時工具欄跟隨文字

android仿ios實現分段選擇控制元件UISegmentedControl

在ios7中有一種扁平風格的控制元件叫做分段選擇控制元件UISegmentedControl,控制元件上橫放或豎放著幾個被簡單線條隔開的按鈕,每次點選能切換不同的按鈕和按鈕所對應的介面,比如qq客戶端V6.5.3版本中訊息頁與電話頁分離就是用的這種原理。但是很可

android滑動控制元件過程中動態設定view背景透明的問題

2、在網上找了資料才知道,在佈局中多個控制元件同時使用一個資源的時候,這些控制元件會共用一個狀態,例如ColorState,如果你改變了一個控制元件的狀態,其他的控制元件都會接收到相同的通知。這時我們可以使用mutate()方法使該控制元件狀態不定,這樣不定狀態的控制元件就不會共享自己的狀態了。

Android運用自定義控制元件實現閃爍字

專案中要用到閃爍字來標識一些重要的提醒以及醒目的文字等,這裡Android並沒有為我們提供一些元件,這裡可以使用自定義的TextView,運用paint設定漸變渲染器LinearGradient來實現。 先看一下實現的效果,由於寫的倉促就沒有做動圖了。。。就是一個藍色的漸變

Android開發自定義控制元件實現一個折線圖

實現一個如下圖所示的折線圖 首先是控制元件繪圖區域的劃分,控制元件左邊取一小部分(控制元件總寬度的八分之一)繪製表頭,右邊剩餘的部分繪製表格 確定表格的行列數,首先繪製一個三行八列的網格,設定好行列的座標後開始繪製 /*繪製三條橫線*/ for(int i=0;i&l

android 動態新增控制元件實現每個子控制元件的點選事件

         需求:我們要點選進入一家店鋪,根據不同的店鋪,顯示不同條數的子條目 如:消毒間,洗菜間等。。。這些都是或多或少的,所以需要動態新增:    首先自定義View(linearLayout): package cn.qust.fang.widget; imp

Android 無限滑盤控制元件 WheelView實現

先看下效果 先說下實現思路,這裡,我打算使用ListView來實現。 第一步:無限滑動,這個比較簡單,類似於Banner圖的無限滑動原理,在Adapter中處理一下count即可,程式碼如下 // 為Count設定一個較大的值 @Override

Android自定義組合控制元件實現CheckBox變化

前言:自定義組合控制元件最大的好處就是複用性,可以為我們節省不少程式碼量,但是一般我們自定義組合控制元件的時候,封裝出來的控制元件不管是自己用還是別人用也好,封裝的程式碼最好是易讀性強,便於修改,沒有必要封裝太多的屬性,一般控制在兩三個屬性為最佳,畢竟我們不是Google.