Wie der Titel schon sagt, wenn Sie den Bildschirm berühren, glitzert er und Markierungen erscheinen. Ich wollte das tun, also habe ich mir notiert, was ich nachgeschlagen habe.
Die iOS-Version ist übrigens hier * Objective-c
Android scheint onTouchEvent zu verwenden.
Erstellen Sie zunächst eine Java-Klasse, die die Activity-Klasse erbt, und implementieren Sie 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);
}
}
Jetzt enthalten pointX und pointY die X- und Y-Koordinaten des Berührungspunkts. Danach, wenn Sie es gut damit machen.
Zum Beispiel ...
1.activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/tapLayout"← ID geben
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 {
//Definieren Sie ViewGroup
RelativeLayout tapLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Ersetzen Sie RelativeLayout durch die in XML angegebene ID für die definierte ViewGroup
tapLayout = (RelativeLayout)findViewById(R.id.tapLayout)
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float pointX = event.getX();
float pointY = event.getY();
//Holen Sie sich Bildschirm-DP und bereiten Sie die Bildgröße vor
float dp = getResources().getDisplayMetrics().density;
int imgSize = (int)(50 * dp);
//Bild einstellen
ImageView img = new ImageView(getApplicationContext());
img.setImageResource(R.drawable.Bild markieren);
//Stellen Sie die Bildgröße in ImageView ein
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(imgSize, imgSize);
img.setLayoutParams(params);
//Stellen Sie den Berührungspunkt so ein, dass er sich in der Mitte des Bildes befindet
img.setX(pointX-imgSize/2);
img.setY(pointY-imgSize/2);
img.setScaleType(ImageView.ScaleType.FIT_XY);
//Bild auf halbe Größe reduzieren
img.setScaleX(0.5f);
img.setScaleY(0.5F);
//Zeichne ein Bild
tapLayout.addView(img);
//0.Animation, die transparent wird, während sie über 3 Sekunden auf die ursprüngliche Größe erweitert wird
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) {
//Am Ende der Animation gelöscht
tapLayout.removeView(img);
}
@Override
public void onAnimationCancel(View view) {
}
}).start();
return super.onTouchEvent(event);
}
Aber wenn Sie darauf tippen, kommt der Effekt heraus und es ist nicht cool. .. .. Selbst wenn Sie Ihren Finger bewegen, während Sie auf den Bildschirm tippen, folgt dies nicht. Wenn Sie in der gesamten Anwendung einen Effekt auf den Bildschirm ausüben möchten, können Sie dies nicht in allen Aktivitäten beschreiben. Daher möchten Sie jeden Bildschirm mit einer Aktivität implementieren, die dies erbt.
Das Folgende ist die Erfüllung all dieser Gier.
1.TapActivity.java
public class TapActivity extends Activity {
//Definieren Sie ViewGroup
ViewGroup viewGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//Bereiten Sie eine Methode zum Empfangen von ViewGroup vor
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);
//Verzweigungsaktion mit switch-Anweisung
switch (event.getAction()){
//Beim Tippen auf den Bildschirm
case MotionEvent.ACTION_DOWN:
break;
//Wenn Ihr Finger nicht auf dem Bildschirm ist
case MotionEvent.ACTION_UP:
final ImageView img = new ImageView(getApplicationContext());
img.setImageResource(R.drawable.Bild markieren);
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;
//Wenn Sie Ihren Finger bewegen, während Sie auf den Bildschirm tippen
case MotionEvent.ACTION_MOVE:
final ImageView img2 = new ImageView(getApplicationContext());
img2.setImageResource(R.drawable.Bild markieren);
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, die transparent wird, während sie über 3 Sekunden schrumpft
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
//TapActivity erben
public class MainActivity extends TapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Übergeben Sie ViewGroup mit der in der XML-Datei angegebenen ID
setViewGroup((RelativeLayout)findViewById(R.id.mainLayout));
}
}
Jetzt können Sie tippen und sich bewegen, um zu folgen, und selbst wenn Sie es erben, wird es funktionieren. Übrigens scheint es keine Möglichkeit zu geben, die aktuell angezeigte ViewGroup auf Android zu erhalten, daher war es ziemlich schwierig, sie zu erben und den Effekt zu zeichnen. Am Ende habe ich die uncoole Methode gewählt, bei der der Anrufer sie jedes Mal an onCreate weiterleitet. .. ..
Wenn jemand einen anderen guten Weg kennt, gib mir bitte einen Rat!
Recommended Posts