在自定义视图中添加触摸效果 - Android
Adding touch effect in custom View - Android
我创建了一个自定义 View
,里面有一段文字:
canvas.drawText(text,
bounds.centerX(),
_getTextVerticalCenterPosition(bounds, paint),
paint);
_getTextVerticalCenterPosition
只是 return 的 y 位置。
现在开始触摸 (onTouchEvent
) 我想设置任何效果让用户在视觉上感受到触摸但不知道从哪里开始。 MotionEvent.ACTION_DOWN
应该启动效果,MotionEvent.ACTION_UP
应该结束效果,return 文本恢复到初始外观。 "sliding" 屏幕上的手指呢?如果文本的初始外观是 return 在手指离开边界之后而不是在 MotionEvent.ACTION_UP
.
之后编辑,那就太好了
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
}
}
}
return true;
}
或者是否可以在我的自定义视图中使用基本视图,例如 Button
,并将它们与圆弧和路径结合起来?
解决方法:
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
_setTextColor(mOnTouchColor);
invalidate();
}
break;
}
case MotionEvent.ACTION_MOVE: {
_setTextColor(mColor);
invalidate();
break;
}
case MotionEvent.ACTION_MOVE: {
// Finger off the bounds
if (!bounds.contains(x, y)) {
_setTextColor(mColor);
invalidate();
}
break;
}
}
return true;
}
您可以使用 onTouch 来解决这个问题,这里重要的一件事是调用 invalidate()
- 告诉视图用新数据重新绘制自身
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
// Change paint, text size or what ever
invalidate();
}
}
case MotionEvent.ACTION_UP:
// Apply original paint, size, ..
invalidate();
}
return true;
}
我创建了一个自定义 View
,里面有一段文字:
canvas.drawText(text,
bounds.centerX(),
_getTextVerticalCenterPosition(bounds, paint),
paint);
_getTextVerticalCenterPosition
只是 return 的 y 位置。
现在开始触摸 (onTouchEvent
) 我想设置任何效果让用户在视觉上感受到触摸但不知道从哪里开始。 MotionEvent.ACTION_DOWN
应该启动效果,MotionEvent.ACTION_UP
应该结束效果,return 文本恢复到初始外观。 "sliding" 屏幕上的手指呢?如果文本的初始外观是 return 在手指离开边界之后而不是在 MotionEvent.ACTION_UP
.
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
}
}
}
return true;
}
或者是否可以在我的自定义视图中使用基本视图,例如 Button
,并将它们与圆弧和路径结合起来?
解决方法:
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
_setTextColor(mOnTouchColor);
invalidate();
}
break;
}
case MotionEvent.ACTION_MOVE: {
_setTextColor(mColor);
invalidate();
break;
}
case MotionEvent.ACTION_MOVE: {
// Finger off the bounds
if (!bounds.contains(x, y)) {
_setTextColor(mColor);
invalidate();
}
break;
}
}
return true;
}
您可以使用 onTouch 来解决这个问题,这里重要的一件事是调用 invalidate()
- 告诉视图用新数据重新绘制自身
@Override
public boolean onTouchEvent(MotionEvent event)
{
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if (bounds.contains(x, y)) {
// Text pressed
// Change paint, text size or what ever
invalidate();
}
}
case MotionEvent.ACTION_UP:
// Apply original paint, size, ..
invalidate();
}
return true;
}