自定義imageview,實現多點縮放回彈

2021-08-27 02:52:28 字數 3333 閱讀 4707

package laladin.album;

import android.content.context;

import android.graphics.bitmap;

import android.util.floatmath;

import android.view.motionevent;

import android.view.animation.accelerateinterpolator;

import android.view.animation.animation;

import android.view.animation.animation.animationlistener;

import android.view.animation.scaleanimation;

import android.view.animation.translateanimation;

import android.widget.imageview;

/** * imageview tonuch

* @author laladin.syd

* */

public class myimageview extends imageview

@override

public void setimagebitmap(bitmap bm)

/*** 釋放imageview的bitmap

*/public void recycle()

/*** 計算兩點間的距離

*/private float spacing(motionevent event)

private float center;

/*** 計算兩點間的中心點

*/private float centerpostion(motionevent event)

/*** 設定imageview大小等於顯示的內容大小

*/public void setrect()

/*** 處理各種移動回彈

* * @param disx

* x的偏移

* @param disy

* y的偏移

*/public void rebound(int disx, int disy)

/*** 處理各種縮放回彈

*/public boolean rescale()

scalex=(float)width/(float)getwidth();

scaley=(float)height/(float)getheight();

} if (getwidth() < startwidth * minscale)

scalex=(float)width/(float)getwidth();

scaley=(float)height/(float)getheight();

} if (scalex == 1f && scaley == 1f)

return false;

if((animswitch&openscale)==0)

scaleanimation scaleanim = new scaleanimation(scalex, 1f, scaley, 1f,

scaleanimation.relative_to_self, piovtx,

scaleanimation.relative_to_self, piovty);

scaleanim.setduration(300);

scaleanim.setinterpolator(new accelerateinterpolator());

scaleanim.setanimationlistener(new animationlistener()

@override

public void onanimationrepeat(animation paramanimation) {}

@override

public void onanimationend(animation paramanimation)

});this.startanimation(scaleanim);

return true;

} /**

* 處理超範圍回彈

*/private void onrebound()

if (getwidth() < screenw)

if (getheight() >= screenh)

if (getwidth() >= screenw)

//開始回彈

rebound(disx, disy);

} @override

protected void onlayout(boolean changed, int left, int top, int right,

int bottom)

} /**

* 處理觸碰..

*/@override

public boolean ontouchevent(motionevent event)

break;

case motionevent.action_up:

mode = none;

setrect();

/* 判斷是否超過縮放界限 */

if (!rescale())

onrebound();

break;

case motionevent.action_pointer_up:

mode = none;

break;

case motionevent.action_move:

/* 處理拖動 */

if (mode == drag)

/* 處理縮放 */

else if (mode == zoom) else if (math.abs(gaplenght) > 5f) else

beforelenght = afterlenght;}}

}break;

} return true;

} /**

* 實現處理縮放

*/private void setscale(float temp, int flag) else if (flag == smaller)

this.setframe(l, t, r, b);

} /**

* 實現處理拖動

*/private void setposition(int left, int top, int right, int bottom)

}

自定義控制項Image View的實現

一,設定自定義控制項所需屬性,此設定可用於xml布局,在布局檔案layout中設定繪製控制項所需的color,paintwidth等。在res values下的attrs檔案加入所需屬性 declare styleable中的name為layout中使用的控制項name,attr中指定屬性名及所屬型...

自定義圓形Imageview

1 學習一定要善於總結,和敢於使用新的知識 2 一直使用的都是別人寫好的控制項,今天趁著國慶放假有時間,嘗試自己寫經常要用到的框架 3 知識總結 一 用於建立canvas的bitmap不能是已經存在的bitmap 二 這個自定view中遇到乙個坑就是的大小和遮罩大小不匹配是,需要我們對bitmap做...

自定義ImageView控制項

package com.zdsoft.circleimageview import android.content.context import android.content.res.typedarray import android.graphics.bitmap import android....