| | |
| | | import android.content.Context; |
| | | import android.graphics.Canvas; |
| | | import android.util.AttributeSet; |
| | | import android.util.Log; |
| | | import android.view.GestureDetector; |
| | | import android.view.LayoutInflater; |
| | | import android.view.MotionEvent; |
| | |
| | | import android.view.View; |
| | | import android.widget.OverScroller; |
| | | import android.widget.RelativeLayout; |
| | | import android.widget.Toast; |
| | | |
| | | import androidx.annotation.Nullable; |
| | | import androidx.constraintlayout.utils.widget.ImageFilterView; |
| | | |
| | | import com.application.zhangshi_app_android.R; |
| | | |
| | |
| | | // 放大后手指移动位置 |
| | | private final OffSet moveOffset = new OffSet(); |
| | | private boolean isDoubleClickZoomIn = false; |
| | | |
| | | |
| | | |
| | | private ImageFilterView imageFilterView; |
| | | public TreeView(Context context) { |
| | | this(context, null); |
| | | } |
| | |
| | | layoutParams.alignWithParent = true; |
| | | layoutParams.addRule(CENTER_IN_PARENT); |
| | | addView(treeView,layoutParams); |
| | | |
| | | imageFilterView = treeView.findViewById(R.id.imageFilterView); |
| | | imageFilterView.setOnTouchListener(new OnTouchListener() { |
| | | @Override |
| | | public boolean onTouch(View v, MotionEvent event) { |
| | | Log.d("TAG", "onTouch: getX"+event.getX()); |
| | | Log.d("TAG", "onTouch: getY"+event.getY()); |
| | | Toast.makeText(mContext,"被触摸",Toast.LENGTH_SHORT).show(); |
| | | return false; |
| | | } |
| | | }); |
| | | |
| | | mGestureDetector = new GestureDetector(context, new MyGestureListener()); |
| | | mScaleGestureDetector = new ScaleGestureDetector(context, new MyScaleGestureListener()); |
| | | mOverScroller = new OverScroller(context); |
| | |
| | | bigScale = (float) getHeight() / (float) treeView.getMeasuredHeight() * ZOOM_SCALE; |
| | | |
| | | // 当前缩放比例 = 缩放前的比例 |
| | | currentScale = smallScale; |
| | | currentScale = 1; |
| | | |
| | | Log.d("TAG", "onSizeChanged: getX"+imageFilterView.getX()); |
| | | Log.d("TAG", "onSizeChanged: getY"+imageFilterView.getY()); |
| | | } |
| | | |
| | | // @Override |
| | | // public boolean dispatchTouchEvent(MotionEvent ev) { |
| | | // // 对触摸事件进行缩放和平移变换 |
| | | // MotionEvent event = MotionEvent.obtain(ev); |
| | | // event.setLocation((event.getX() - moveOffset.getPhyX()) / currentScale, (event.getY() - moveOffset.getPhyY()) / currentScale); |
| | | // |
| | | // // 将触摸事件传递给子视图 |
| | | // boolean handled = super.dispatchTouchEvent(event); |
| | | // |
| | | // // 回收触摸事件 |
| | | // event.recycle(); |
| | | // |
| | | // return handled; |
| | | // } |
| | | @Override |
| | | protected void onDraw(Canvas canvas) { |
| | | super.onDraw(canvas); |
| | | canvas.scale(currentScale, currentScale, getWidth() / 2f, getHeight() / 2f); |
| | | // 移动画布 |
| | | if (isDoubleClickZoomIn){ |
| | | if (currentScale <= bigScale) {//双击改变状态时偏移量随着缩放比例变化 |
| | | float a = (currentScale - smallScale) / (bigScale - smallScale); |
| | | moveOffset.setPhyX(moveOffset.getPhyX() * a); |
| | | moveOffset.setPhyY(moveOffset.getPhyY() * a); |
| | | } |
| | | } |
| | | // // 移动画布 |
| | | // if (isDoubleClickZoomIn){ |
| | | // if (currentScale <= bigScale) {//双击改变状态时偏移量随着缩放比例变化 |
| | | // float a = (currentScale - smallScale) / (bigScale - smallScale); |
| | | // moveOffset.setPhyX(moveOffset.getPhyX() * a); |
| | | // moveOffset.setPhyY(moveOffset.getPhyY() * a); |
| | | // } |
| | | // } |
| | | canvas.translate(moveOffset.getLogX(currentScale), moveOffset.getLogY(currentScale)); |
| | | } |
| | | |
| | | @Override |
| | | public boolean onTouchEvent(MotionEvent event) { |
| | | // 双指操作 |
| | |
| | | // 双击情况 : 第二次抬起[ACTION_POINTER_UP]时候触发 |
| | | @Override |
| | | public boolean onSingleTapUp(MotionEvent e) { |
| | | Log.d("onDown", "onUp: "); |
| | | Log.d("onDown", "onUp: e.getX() = " + e.getX()); |
| | | Log.d("onDown", "onUp: e.getY() = " + e.getY()); |
| | | return super.onSingleTapUp(e); |
| | | } |
| | | |
| | |
| | | return true; |
| | | } |
| | | |
| | | |
| | | // 双击 -- 第二次按下时候触发 (40ms - 300ms) [小于40ms是为了防止抖动] |
| | | @Override |
| | | public boolean onDoubleTap(MotionEvent e) { |