Comme le titre l'indique, lorsque vous touchez l'écran, il brille et des marques apparaissent. Je voulais faire ça, alors j'ai noté ce que j'ai regardé.
À propos, la version iOS est ici * Objective-c
Android semble utiliser onTouchEvent.
Tout d'abord, créez une classe java qui hérite de la classe Activity et implémentez onTouchEvent.
public class TapActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tap);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
return super.onTouchEvent(event);
}
}
Désormais, pointX et pointY contiendront les coordonnées X et Y du point de contact. Après cela, si vous le faites bien avec ça.
Par exemple ...
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/tapLayout"← Donnez votre identifiant
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="jp.***.***.***.***.TapActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</RelativeLayout>
2.TapActivity.java
public class TapActivity extends Activity {
//Définir ViewGroup
RelativeLayout tapLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Remplacez RelativeLayout par l'ID donné en xml au ViewGroup défini
tapLayout = (RelativeLayout)findViewById(R.id.tapLayout)
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
//Obtenez l'écran dp et préparez la taille de l'image
float dp = getResources().getDisplayMetrics().density;
int imgSize = (int)(50 * dp);
//Définir l'image
ImageView img = new ImageView(getApplicationContext());
img.setImageResource(R.drawable.Marquer l'image);
//Définir la taille de l'image dans ImageView
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(imgSize, imgSize);
img.setLayoutParams(params);
//Réglez le point tactile pour qu'il se trouve au milieu de l'image
img.setX(pointX-imgSize/2);
img.setY(pointY-imgSize/2);
img.setScaleType(ImageView.ScaleType.FIT_XY);
//Réduire l'image à la moitié de sa taille
img.setScaleX(0.5f);
img.setScaleY(0.5F);
//Dessiner une image
tapLayout.addView(img);
//0.Animation qui devient transparente tout en augmentant à la taille d'origine en 3 secondes
ViewCompat.animate(img)
.setDuration(300)
.alpha(0)
.scaleX(1)
.scaleY(1)
.setListener(new ViewPropertyAnimatorListener() {
@Override
public void onAnimationStart(View view) {
}
@Override
public void onAnimationEnd(View view) {
//Supprimé à la fin de l'animation
tapLayout.removeView(img);
}
@Override
public void onAnimationCancel(View view) {
}
}).start();
return super.onTouchEvent(event);
}
Mais avec cela, lorsque vous appuyez dessus, l'effet sort et ce n'est pas cool. .. .. De plus, même si vous bougez votre doigt tout en touchant l'écran, cela ne suit pas. De plus, si vous souhaitez mettre un effet sur l'écran, appuyez sur tout au long de l'application, vous ne pouvez pas le décrire dans toutes les activités, vous souhaitez donc implémenter chaque écran avec une activité qui en hérite.
Ce qui suit est l'accomplissement de toute telle cupidité.
1.TapActivity.java
public class TapActivity extends Activity {
//Définir ViewGroup
ViewGroup viewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//Préparer une méthode pour recevoir ViewGroup
public void setViewGroup(ViewGroup vg){
viewGroup = vg;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
float dp = getResources().getDisplayMetrics().density;
int imgSize = (int)(50 * dp);
//Action de branche avec instruction switch
switch (event.getAction()){
//Lorsque vous appuyez sur l'écran
case MotionEvent.ACTION_DOWN:
break;
//Lorsque votre doigt est hors de l'écran
case MotionEvent.ACTION_UP:
final ImageView img = new ImageView(getApplicationContext());
img.setImageResource(R.drawable.Marquer l'image);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(imgSize, imgSize);
img.setLayoutParams(params);
img.setX(pointX-imgSize/2);
img.setY(pointY-imgSize/2);
img.setScaleType(ImageView.ScaleType.FIT_XY);
img.setScaleX(0.5f);
img.setScaleY(0.5F);
viewGroup.addView(img);
ViewCompat.animate(img)
.setDuration(300)
.alpha(0)
.scaleX(1)
.scaleY(1)
.setListener(new ViewPropertyAnimatorListener() {
@Override
public void onAnimationStart(View view) {
}
@Override
public void onAnimationEnd(View view) {
viewGroup.removeView(img);
}
@Override
public void onAnimationCancel(View view) {
}
}).start();
break;
//Lorsque vous bougez votre doigt tout en touchant l'écran
case MotionEvent.ACTION_MOVE:
final ImageView img2 = new ImageView(getApplicationContext());
img2.setImageResource(R.drawable.Marquer l'image);
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(imgSize, imgSize);
img2.setLayoutParams(params2);
img2.setX(pointX-imgSize/2);
img2.setY(pointY-imgSize/2);
img2.setScaleType(ImageView.ScaleType.FIT_XY);
viewGroup.addView(img2);
//0.Animation qui devient transparente en se rétrécissant en 3 secondes
ViewCompat.animate(img2)
.setDuration(300)
.alpha(0)
.scaleX(0.01f)
.scaleY(0.01f)
.setListener(new ViewPropertyAnimatorListener() {
@Override
public void onAnimationStart(View view) {
}
@Override
public void onAnimationEnd(View view) {
viewGroup.removeView(img2);
}
@Override
public void onAnimationCancel(View view) {
}
}).start();
break;
}
return super.onTouchEvent(event);
}
}
2.MainActivity.java
//Hériter de TapActivity
public class MainActivity extends TapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Passer ViewGroup avec l'ID donné dans le fichier xml
setViewGroup((RelativeLayout)findViewById(R.id.mainLayout));
}
}
Vous pouvez maintenant appuyer et vous déplacer pour suivre, et même si vous en héritez, cela fonctionnera. À propos, il ne semble y avoir aucun moyen d'obtenir le ViewGroup actuellement affiché sur Android, il était donc assez difficile d'en hériter et de dessiner l'effet. En fin de compte, j'ai pris la méthode non cool de faire passer l'appelant sur onCreate à chaque fois. .. ..
Si quelqu'un connaît un autre bon moyen, donnez-moi s'il vous plaît quelques conseils!