package hk.hku.cs.srli.widget; import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.FrameLayout; import hk.hku.cs.srli.widget.util.EdgeEffectHelper; import hk.hku.cs.srli.widget.util.HoverHandler; public class HoverFrame extends FrameLayout { private HoverHandler hover; private EdgeEffectHelper edge; public HoverFrame(Context context) { super(context); init(null, 0); } public HoverFrame(Context context, AttributeSet attrs) { super(context, attrs); init(attrs, 0); } public HoverFrame(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(attrs, defStyle); } private void init(AttributeSet attrs, int defStyle) { hover = new HoverHandler(this); edge = new EdgeEffectHelper(this); hover.setOnHoverMoveListener(edge); edge.applyStyledAttributes(attrs, defStyle); setWillNotDraw(false); } public void setHorizontalScrollable(boolean leftScrollable, boolean rightScrollable) { edge.setHorizontalScrollable(leftScrollable, rightScrollable); } public void setVerticalScrollable(boolean topScrollable, boolean bottomScrollable) { edge.setVerticalScrollable(topScrollable, bottomScrollable); } @Override public void onHoverChanged(boolean hovered) { super.onHoverChanged(hovered); edge.onHoverChanged(hovered); } @Override public boolean onInterceptHoverEvent(MotionEvent event) { hover.onHoverEvent(event); return super.onInterceptHoverEvent(event); } @Override public boolean onHoverEvent(MotionEvent event) { // already handled above return false; } @Override public void draw(Canvas canvas) { super.draw(canvas); if (isEnabled()) edge.draw(canvas); } }