Создание чего-то похожего на опцию «Показать касания» в настройках разработчика

#java #android #view #touch

#java #Android #Вид #коснитесь

Вопрос:

Я пытаюсь создать что-то для своего приложения, которое делает по существу то же самое, что и опция «Показать касания» в настройках разработчика в более новых версиях Android.

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

У меня появляется круг и следует за пальцем. Проблема, с которой я сталкиваюсь, заключается в том, что мой круг — это представление, и когда я пытаюсь поместить в приложение другое представление (в моем случае GridView), оно охватывает мое круговое представление. Таким образом, вы можете взаимодействовать с GridView, но я думаю, что круговое представление скрыто или перезаписано.

В моем случае мне нужно что-то вроде сенсорного представления сверху, но при этом иметь возможность взаимодействовать с представлениями ниже. В основном точно так же, как показывать прикосновения, кроме как в приложении.

Мой код для круга:

MainActvity.java

 public class Activity1 extends Activity {

drawingView dview;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    dview = new drawingView(this);
    dview.bringToFront();

    setContentView(dview);
            setContentView(R.layout.activity_activity1);

            GridView gridview = (GridView) findViewById(R.id.gridview);

            gridview.setAdapter(new ImageAdapter(this));

            gridview.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {

                    Toast.makeText(Activity1.this, "Position "   position,
                            Toast.LENGTH_SHORT).show();

                }
            });
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity1, menu);
    return true;
}
  

drawingView.java

 public class drawingView extends View implements OnTouchListener {

static int x, y, r = 0, g = 0, b = 0;
final static int radius = 30;
Paint paint;

public drawingView(Context context) {


    super(context);
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setARGB(255, r, g, b);

    setFocusable(true);

    this.setOnTouchListener(this);


}


@Override
public void onDraw(Canvas canvas) {
    canvas.drawCircle(x, y, radius, paint);

}

@Override
public boolean onTouch(View view, MotionEvent event) {
    view.setVisibility(View.VISIBLE);
    paint.setARGB(255, r, g, b);

    x = (int) event.getX() - (radius / 2); 
    y = (int) event.getY() - (radius / 2);
    randColor();
    invalidate();

    int eventaction = event.getAction();
    switch (eventaction) {
    case MotionEvent.ACTION_UP:

        /*r = 111;
        g = 111;
        b = 111;*/
        paint.setARGB(1, r, g, b);

        break;
    }


    return true;

}

public void randColor() {
    r = 1;
    g = 1;
    b = 1;
}
  

activity_main.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="#ffffff"
  android:orientation="horizontal"
  tools:context=".Activity1" >

<GridView
    android:id="@ id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />



</RelativeLayout>
  

Любая помощь очень ценится,

РЕДАКТИРОВАТЬ Я обновил весь приведенный выше код, чтобы отразить ответ @Onurs и показать код сетки.

Ответ №1:

Вместо onDraw этого используйте draw .

 @Override 
public void draw(Canvas canvas) {
    super.draw(canvas);
    canvas.drawCircle(x, y, radius, paint);
} 
  

Комментарии:

1. извините, это, похоже, ничего не меняет. Я опубликовал весь свой код, если это поможет