gpt4 book ai didi

android - 多个 OnTouchListener

转载 作者:行者123 更新时间:2023-11-29 21:31:07 25 4
gpt4 key购买 nike

我制作了一个自定义 View ,它具有 OnTouchEvent(MotionEvent event) 方法。这使得 View 在按下时改变颜色。

我还为我的 Activity 实现了一个 OnTouchListener,然后通过 view.setOnTouchListener(this); 向它注册 View 这带来了一个问题,这意味着只有 Activity 的 OnTouchListener 有效。

有解决办法吗?

这是我在尝试评论中给出的链接后的代码。抱歉!:

我的自定义 View :

public class DotView extends View implements OnTouchListener {

int RADIUS = 30;
int prevRADIUS;

private Paint paint = new Paint();

float mTranslateX;
float mTranslateY;

int dotX, dotY, color;

private Activity context = null;

public void ReservedCanvas(Activity context) {
super(context);
this.context = context;

this.paint = new Paint();

setFocusable(true);
setFocusableInTouchMode(true);

this.setOnTouchListener(this);

paint.setAntiAlias(true);
}

public DotView(Context context, AttributeSet attrs) {
super(context, attrs);

paint.setAntiAlias(true);
paint.setStrokeWidth(6f);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setColor(Color.BLACK);

}

public void setColor(int color) {
paint.setColor(color);
invalidate();
}

public int getColor() {
return paint.getColor();
}

public void setRadius(int radius) {
RADIUS = radius;
invalidate();
}

public int getRadius() {
return RADIUS;
}

public void onDraw(Canvas canvas) {

super.onDraw(canvas);
canvas.save();
canvas.translate(mTranslateX, mTranslateY);
canvas.drawCircle(0, 0, RADIUS, paint);
canvas.restore();
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int dia = RADIUS * 4;
int w = resolveSize(dia, widthMeasureSpec);
int h = resolveSize(dia, heightMeasureSpec);
setMeasuredDimension(w, h);
float radius = Math.min(w, h) / 2F;
mTranslateX = radius;
mTranslateY = radius;
}


private void setOnTouchFeedback(Boolean bool) {
// TODO Check this works

if (bool == true) {

int rad = getRadius();
prevRADIUS = rad;
float touchedRad = (float) (rad * 1.4);
int rounded = Math.round(touchedRad);
setRadius(rounded);
}


}

@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction() & MotionEvent.ACTION_MASK;

switch (action) {
case MotionEvent.ACTION_DOWN: {
this.pointerPressed(event);
break;
}
case MotionEvent.ACTION_MOVE: {
this.pointerDragged(event);
break;
}
case MotionEvent.ACTION_UP: {
this.pointerReleased();
break;
}
}

return true;
}

protected void pointerPressed(MotionEvent event) {
// you can save touch point here!

setOnTouchFeedback(true);
}

protected void pointerDragged(MotionEvent event) {
// for get x ==> eveevent.getX()
// for get y ==> eveevent.getY()

this.repaint();
}

protected void pointerReleased() {
}

public void repaint() {
this.invalidate();
}
}

最佳答案

来自 onTouchListener 的文档 - http://developer.android.com/reference/android/view/View.OnTouchListener.html我认为 Listener 需要在显示 toast 后返回 false,以便调用 View 的 onTouchMethod。

你试过吗?

关于android - 多个 OnTouchListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com