原本想用北極星小姐姐鎮(zhèn)樓? 誰知道壓縮gif的時候畫質(zhì)只能選普請 因為簡書限制5m 都壓成鬼了
話不多說 思路自定義view設(shè)置背景?setBackgroundResource(R.drawable.timi);
然后把view轉(zhuǎn)換成圖片
public BitmapconvertViewToBitmap() {
Bitmap bitmap= Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(), Bitmap.Config.ARGB_8888);
? ? Canvas canvas =new Canvas(bitmap);
? ? draw(canvas);
? ? return bitmap;
}
然后調(diào)用放大效果 添加到canves上 這里的效果是放大一倍
mSrcRect =new Rect(x -100, y -100, x +100, y +100);
mDestRect =new Rect(x -200, y -200, x +200, y +200);
canvas.drawBitmap(bm, mSrcRect,mDestRect, mBitPaint);
然后添加收拾監(jiān)聽 根據(jù)手勢效果重繪canves
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (bm ==null) {
//合理的位置
? ? ? ? ? ? ? ? bm = convertViewToBitmap();
? ? ? ? ? ? }
x = (int) event.getX();
? ? ? ? ? ? y = (int) event.getY();
break;
? ? ? ? case MotionEvent.ACTION_MOVE:
x = (int) event.getX();
? ? ? ? ? ? y = (int) event.getY();
break;
? ? ? ? case MotionEvent.ACTION_UP:
isTouch =true;
break;
? ? }
invalidate();
return true;
}
這樣一個方形的放大效果就可以出現(xiàn)了
思考一下 放大鏡沒有方形的吧? 怎樣把方形的轉(zhuǎn)換成圓形的呢?
思路 有2種? 第一種是把bitmap轉(zhuǎn)換成圓形
? ? ? ? ? ? ? ? ? ?第二種是調(diào)用android 的Xfermode
想了想還是研究下xfermode吧
網(wǎng)上查了下資料 。我操? ?一臉懵逼 居然有2種答案
1種mode 居然出現(xiàn)了2種效果? 隨后看了下源碼
一個枚舉 一共16種描述? 什么源遮蓋物 目標(biāo)物啊 看的一臉懵逼
可能是語文學(xué)的不好吧? 于是自己試試吧 測試下16種效果 然后舉例來吧
src:
srcin
經(jīng)反復(fù)測試 16種復(fù)合第二個文章效果
順便上下ondraw
@Override
protected void onDraw(Canvas canvas) {
mSrcRect =new Rect(x -100, y -100, x +100, y +100);
? ? mDestRect =new Rect(x -200, y -200, x +200, y +200);
? ? mDestRect1 =new Rect(x -300, y -300, x +100, y +100);
? ? if (isTouch ==true) {
//清屏功能? 投機取巧
? ? ? ? mDestRect =new Rect(x -100, y -100, x +100, y +100);
? ? ? ? canvas.drawBitmap(bm, mSrcRect, mDestRect, mBitPaint);
? ? ? ? isTouch =false;
? ? }else {
if (bm !=null) {
int layerId = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, Canvas.ALL_SAVE_FLAG);
? ? ? ? ? ? canvas.drawOval(new RectF(mDestRect), mBitPaint);
? ? ? ? ? ? mBitPaint.setXfermode(new PorterDuffXfermode(mode));
? ? ? ? ? ? canvas.drawBitmap(bm, mSrcRect,mDestRect, mBitPaint);
? ? ? ? ? ? mBitPaint.setXfermode(null);
? ? ? ? ? ? canvas.restoreToCount(layerId);
? ? ? ? }
}
super.onDraw(canvas);
}
最后上一張稍微清除的放大鏡效果動圖太花了
參考文獻? ??提供下參考文獻
GitHub 地址? ? ??this is 傳送門
?由于地址demo較多 如有需要請單獨下載MagnifyingGlassView
優(yōu)化? ?如果做是做高清放大圖 不要去view轉(zhuǎn)bitmap 要git源資源文件根據(jù)手勢在view上的比例
取出在高清原圖上的具體位置然后再去截圖圖片槽华。