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....