#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. извините, это, похоже, ничего не меняет. Я опубликовал весь свой код, если это поможет