2009Scape-mobile/app/src/main/java/net/kdt/pojavlaunch/customcontrols/ControlView.java
khanhduytran0 44bac63dac Changes
- [Custom control] Move source files.
- [Input pipe] Force to trigger update screen size at least once to fix wrong cursor position.
2020-11-09 13:30:50 +07:00

145 lines
3.6 KiB
Java

package net.kdt.pojavlaunch.customcontrols;
import android.content.*;
import android.view.*;
import android.view.View.*;
import android.widget.*;
import net.kdt.pojavlaunch.*;
import com.kdt.handleview.*;
import android.view.ViewGroup.*;
public class ControlView extends Button implements OnLongClickListener, OnTouchListener
{
private GestureDetector mGestureDetector;
private ControlButton mProperties;
private SelectionEndHandleView mHandleView;
private boolean mCanModify = false;
private boolean mCanTriggerLongClick = true;
public ControlView(Context ctx, ControlButton properties) {
super(ctx);
mGestureDetector = new GestureDetector(ctx, new SingleTapConfirm());
setBackgroundResource(R.drawable.control_button);
setOnLongClickListener(this);
setOnTouchListener(this);
setProperties(properties);
mHandleView = new SelectionEndHandleView(this);
}
public HandleView getHandleView() {
return mHandleView;
}
public ControlButton getProperties() {
return mProperties;
}
public void setProperties(ControlButton properties) {
setProperties(properties, true);
}
public void setProperties(ControlButton properties, boolean changePos) {
mProperties = properties;
// com.android.internal.R.string.delete
// android.R.string.
setText(properties.name);
if (changePos) {
setTranslationX(moveX = properties.x);
setTranslationY(moveY = properties.y);
}
if (properties.specialButtonListener == null) {
// A non-special button or inside custom controls screen so skip listener
} else if (properties.specialButtonListener instanceof View.OnClickListener) {
setOnClickListener((View.OnClickListener) properties.specialButtonListener);
} else if (properties.specialButtonListener instanceof View.OnTouchListener) {
setOnTouchListener((View.OnTouchListener) properties.specialButtonListener);
} else {
throw new IllegalArgumentException("Field " + ControlButton.class.getName() + ".specialButtonListener must be View.OnClickListener or View.OnTouchListener, but is " + properties.specialButtonListener.getClass().getName());
}
setLayoutParams(new FrameLayout.LayoutParams(properties.width, properties.height));
}
@Override
public void setLayoutParams(ViewGroup.LayoutParams params)
{
super.setLayoutParams(params);
mProperties.width = params.width;
mProperties.height = params.height;
}
@Override
public void setTranslationX(float x)
{
super.setTranslationX(x);
mProperties.x = x;
}
@Override
public void setTranslationY(float y) {
super.setTranslationY(y);
mProperties.y = y;
}
public void updateProperties() {
setProperties(mProperties);
}
@Override
public boolean onLongClick(View p1)
{
if (!mCanTriggerLongClick) return false;
if (mHandleView.isShowing()) {
mHandleView.hide();
} else {
if (getParent() != null) {
((ControlsLayout) getParent()).hideAllHandleViews();
}
mHandleView.show();
}
return true;
}
private float moveX, moveY;
private float downX, downY;
@Override
public boolean onTouch(View view, MotionEvent event) {
if (!mCanModify) {
mCanTriggerLongClick = false;
return false;
}
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
mCanTriggerLongClick = true;
downX = event.getX();
downY = event.getY();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_MOVE:
mCanTriggerLongClick = false;
moveX += event.getX() - downX;
moveY += event.getY() - downY;
setTranslationX(moveX);
setTranslationY(moveY);
break;
}
return false;
}
public void setModifiable(boolean z) {
mCanModify = z;
}
}