событие нажатия кнопки вяло или медленно реагирует - PullRequest
0 голосов
/ 31 декабря 2018

У меня 13 кнопок на фрагменте диалога, 12 расположены в форме круга и одна посередине.Я использую макет ограничения, чтобы расположить кнопки.

Используя пользовательский вид, я рисую линию между каждой из 12 кнопок и кнопкой в ​​среднем переопределении ondraw.В конце каждой строки я добавляю другой пользовательский вид, который использует путь для рисования наконечника стрелки путем переопределения ondraw.

Когда я нажимаю кнопку, я делаю видимым текстовое представление и располагаю его относительно этой кнопки.Я использую одно и то же текстовое представление для каждой кнопки и просто перемещаю его в своем коде.

После нажатия кнопки отклик медленный, между щелчком и отображаемым текстовым представлением заметно колебание.В качестве стороны, это заметно только на моем планшете galaxy a10.хотя при тестировании на смартфоне Galaxy S8 это не заметно.

Кажется, что он застрял с повторными перерисовками экрана.Хотя я не знаю, как поставить диагноз.

С точки зрения кода, я действительно не уверен, что писать.В качестве места для начала я перечислил мою пользовательскую строку, пользовательский наконечник стрелки и событие onclick во фрагменте моего диалога (для первой пары кнопок).

Пожалуйста, дайте мне знать, если что-то выглядит странно по этому поводу,или если вы хотите посмотреть что-нибудь еще.Я не опытный android-программист, и я научился бродить через stackoverflow и другие сайты android.

public class LineView extends View {
private int mXStart, mYStart , mXEnd, mYEnd;
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
Globals g =Globals.getInstance();
Resources res = getResources();
float lineStrokePercent;
MainActivity mMainActivit = new MainActivity();
int stroke;
public LineView(Context context) {
    super(context);
}
public LineView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}
public LineView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}
@Override
public Parcelable onSaveInstanceState() {
    super.onSaveInstanceState();
    Bundle bundle = new Bundle();
    // Save current View's state here
    return bundle;
}

@Override
public void onRestoreInstanceState(Parcelable state) {
    super.onRestoreInstanceState(state);
}
private void init(){
    int color = ContextCompat.getColor(getContext(), R.color.GradientStart);
    paint.setColor(color);
    paint.setAntiAlias(true);
    boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
    if(tabletSize){
        stroke=getResources().getInteger(R.integer.lineStrokeTablet);
        paint.setStrokeWidth(stroke);}
    else
    {stroke=getResources().getInteger(R.integer.lineStrokeSmartPhone);
        paint.setStrokeWidth(stroke); }}
public void onDraw(Canvas canvas) {
     super.onDraw(canvas);
     canvas.drawLine(mXStart, mYStart, mXEnd, mYEnd, paint);
     }
public void setCoords(int xStart, int yStart, int xEnd, int yEnd) 
{   mXStart = xStart;
    mYStart = yStart;
    mXEnd = xEnd;
    mYEnd = yEnd;
     }}

Вот моя стрелка

public class Triangle extends View {
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private Path path;
private int x,y,width,halfWidth;
Globals g =Globals.getInstance();
Resources res = getResources();
float lineStrokePercent;
int stroke;
public Triangle(Context context) {
    super(context);
  }
public Triangle(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
    int x= 30; int y= 30;int width=30;
    halfWidth = width / 2;
    path = new Path();
    path.moveTo(x, y - halfWidth); // Top
    path.lineTo(x - halfWidth, y + halfWidth); // Bottom left
    path.lineTo(x + halfWidth, y + halfWidth); // Bottom right
    path.lineTo(x, y - halfWidth); // Back to Top
    path.close();
}
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawPath(path, paint);
}
private void init(){
    int color = ContextCompat.getColor(getContext(), R.color.GradientStart);
    paint.setColor(color);
    paint.setAntiAlias(true);
    paint.setDither(true);
    boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
    if(tabletSize)
    {stroke=getResources().getInteger(R.integer.lineStrokeTablet);}
    else
    {stroke=getResources().getInteger(R.integer.lineStrokeSmartPhone);}
    paint.setStrokeWidth(stroke);
  }
public void setTriCoords(int xStart, int yStart, int triwidth,int angle) {
    init();
    boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
    if(tabletSize)
        {stroke=getResources().getInteger(R.integer.lineStrokeTablet);}
    else
        {stroke=getResources().getInteger(R.integer.lineStrokeSmartPhone);}
   x = xStart;//+(stroke/2);
   y = yStart;//+(stroke/2);
   width = triwidth;
   halfWidth = width / 2;
   path = new Path();
   path.moveTo(x, y - halfWidth); // Top
   path.lineTo(x - halfWidth, y + halfWidth); // Bottom left
   path.lineTo(x + halfWidth, y + halfWidth); // Bottom right
   path.lineTo(x, y - halfWidth); // Back to Top
   path.close();
   Matrix mMatrix = new Matrix();
    RectF bounds = new RectF();
    path.computeBounds(bounds, true);
    mMatrix.postRotate(angle, bounds.centerX(), bounds.centerY());
    path.transform(mMatrix);
}

Вот щелчок внутри моего диалогового фрагмента дляпервая пара кнопок.

// Balance ring text boxes
@Override
public void onClick(View v) {
    ConstraintLayout mConstraintLayout;
    textViewheader = getView().findViewById(R.id.balancetextheader);
    textView = getView().findViewById(R.id.balancetextt);
    textViewheader.setElevation(50);
    textView.setElevation(50);
    if (textViewheader.getVisibility() == View.VISIBLE) {
        textViewheader.setVisibility(View.INVISIBLE);
        textView.setVisibility(View.INVISIBLE);
    } else {
        textViewheader.setVisibility(View.VISIBLE);
        textView.setVisibility(View.VISIBLE);
        btn0width = btn0.getWidth();
        balancetextwidth = (int) (diameter * 1.2);
        balancetextheight = (int) (diameter * 1);
        textView.setMovementMethod(new ScrollingMovementMethod());
        //set baltext width and height
        mConstraintLayout = (ConstraintLayout) getView().findViewById(R.id.mybalancelayout);
        mConstraintSetBaltext.clone(mConstraintLayout);
        mConstraintSetBaltext.constrainWidth(R.id.balancetextheader,balancetextwidth);
        mConstraintSetBaltext.constrainWidth(R.id.balancetextt,balancetextwidth);
        mConstraintSetBaltext.constrainMaxHeight(R.id.balancetextt,balancetextheight);
        mConstraintSetBaltext.applyTo(mConstraintLayout);
        //view_instance.bringToFront();
        float angle = 0;
        Resources res = getResources();
        boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
        float HorizontalGuidePos1 =.26f;
        float HorizontalGuidePos2 =.38f;
        float HorizontalGuidePos3 =.52f;
        float VerticalGuidePos1=.32f;
        float VerticalGuidePos2=.4f;
        float VerticalGuidePos3=.47f;
        switch (v.getId()) {
            case R.id.x0:
                textView.setText(getString(R.string.BalanceTxt));
                textViewheader.setText(btn0.getText());
                //guideline
                if (tabletSize) {
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextHoriz, .1f);
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextVer, .1f);
                }
                else {
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextHoriz,0.1f);
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextVer, 0.6f);
                }
                //balance text
                mConstraintSetBaltext.connect(R.id.balancetextheader, ConstraintSet.START, R.id.guidelinebalTextVer, ConstraintSet.END);
                mConstraintSetBaltext.connect(R.id.balancetextheader, ConstraintSet.TOP, R.id.guidelinebalTextHoriz, ConstraintSet.BOTTOM);
                mConstraintSetBaltext.applyTo(mConstraintLayout);
                break;
            case R.id.x1:
                textView.setText(getString(R.string.SweetTxt));
                textViewheader.setText(btn1.getText());
                //guideline
               if (tabletSize) {
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextHoriz, HorizontalGuidePos1);
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextVer, VerticalGuidePos2);
                }
                else {
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextHoriz,HorizontalGuidePos1);
                    mConstraintSetBaltext.setGuidelinePercent(R.id.guidelinebalTextVer, VerticalGuidePos2);
                }
                mConstraintSetBaltext.applyTo(mConstraintLayout);
                break;

спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...