mirror of
https://github.com/2009scape/2009Scape-mobile.git
synced 2025-12-16 03:20:11 -07:00
- [Custom control] Move source files. - [Input pipe] Force to trigger update screen size at least once to fix wrong cursor position.
145 lines
3.6 KiB
Java
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;
|
|
}
|
|
}
|