我正在試圖對activity
頂部的圖像進行一些簡單的圖片處理,該圖片位於ImageView
之間,平均高度爲200dp
,並與其父寬度相匹配。Android - 拖拽和剪裁問題
我實現了自定義onTouchListener
類,它創建了一個matrix
和ImageView
將內轉換圖像:
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(v.getX(), event.getY() - start.y);
}
break;
這完美的作品,它拖累了y中的圖像僅限於。但是,當用戶發佈時,我希望將圖像裁剪到可見的ImageView
區域的邊界。
作物:
case MotionEvent.ACTION_UP:
if (mode == DRAG) {
Bitmap bitmap = drawableToBitmap(view.getDrawable());
Bitmap result = Bitmap.createBitmap(bitmap,view.getLeft(), view.getTop(), view.getWidth(), view.getHeight());
view.setImageBitmap(result);
}
break;
這裁剪圖像大小合適,但只能從ImageView的不可見邊界的背景的頂部。隨着呼叫Bitmap
職能功能createBitmap(int x, int y, int width, int height)
我唯一的假設是view.getTop()
正在使它從頂部開始。
所以,我的問題是:我如何計算可見視圖邊界的頂部與背景/矩陣邊界之間的差異?
注:圖像顯示的圖像(藍色),其位於一個活動的頂部(青色尋找區域都只是ImageView
的背景不可見邊界,不活動)
我想強調一點,我不希望使用任何第三方庫來實現此目的。
我更願意提供額外的代碼,如果需要的話。
更新:
全onTouch
方法:
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
// Dump touch event to log
dumpEvent(event);
// Handle touch events here...
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
savedMatrix.set(matrix);
start.set(v.getX(), event.getY());
mode = DRAG;
originalY.y = (int) event.getY();
break;
case MotionEvent.ACTION_UP:
if (mode == DRAG) {
Bitmap bitmap = drawableToBitmap(view.getDrawable());
Bitmap result = Bitmap.createBitmap(bitmap,view.getLeft(), view.getTop(), view.getWidth(), view.getHeight());
view.setImageBitmap(result);
}
break;
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(v.getX(), event.getY() - start.y);
}
break;
}
view.setImageMatrix(matrix);
return true; // indicate event was handled
}
在你的屏幕中,你在全屏背景中設置的任何位圖,或者你設置了任何高度,我知道你已經把200dp,但我認爲它應該在按鈕點擊時裁剪的圖像的可見區域,所以如果你提供我的屏幕信息與實際圖像,然後我會極力幫助你.. –
imageview內的圖像將裁剪到屏幕的寬度,並保持高度根據它被裁剪(正常縮放裁剪),然後用戶可以拖動儘可能多的原始圖像高度提供的空間,它將是任何圖像(最小的適合屏幕寬度)。唯一固定在此的是imageview本身的高度,矩陣大小是動態的,這意味着矩陣頂部和imageview頂部之間的距離也是動態的 –