1. Événement de presse long
1.1 Points de connaissance
(1) Maîtriser la forme de fonctionnement d'un événement de presse longue ;
(2) Vous pouvez définir l’arrière-plan du bureau de votre téléphone mobile ;
1.2 Détails spécifiques
Exemple : Après avoir appuyé longuement sur une image, l'image est définie comme arrière-plan du bureau du téléphone mobile.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".LongClickActivity" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="长按图片设置桌面背景" />
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/head11"
/>
</LinearLayout>
package com.example.longclickproject;
import java.io.IOException;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
public class LongClickActivity extends Activity {
ImageView img =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_long_click);
img = (ImageView) super.findViewById(R.id.img);
img.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
try {
LongClickActivity.this.clearWallpaper();
LongClickActivity.this.setWallpaper(LongClickActivity.this.img.getResources()
.openRawResource(R.drawable.head11));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//清除桌面背景
return false;
}
});
}
}
Le programme ci-dessus signale directement une erreur après un appui long. En effet, la définition de l'arrière-plan du bureau est une opération liée au système de téléphonie mobile. Si les autorisations correspondantes ne sont pas définies, une telle opération ne peut pas être effectuée, nous devons donc la définir dans le fichier de configuration principal.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.longclickproject"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10" />
<uses-permission
android:name="android.permission.SET_WALLPAPER"
/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.longclickproject.LongClickActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Après l'avoir réexécuté, nous avons constaté que le programme pouvait terminer le travail correspondant normalement.
1.3 Résumé
(1) L'événement d'appui long ne répondra que 2 secondes après son déclenchement ;
(2) Méthode de fonctionnement du bureau :
Effacer le bureau : public void clearWallpaper()
Définir le bureau : public void setWallpaper (données InputStream)
2. Événements de clavier
2.1 Points de connaissance
(1) Maîtriser l'utilisation des événements clavier;
(2) Les événements de clavier peuvent être utilisés pour la vérification EMAIL ;
2.2 Détails spécifiques
Exemple : effectuer une vérification par e-mail
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".OnKeyListenerActivity" >
<EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
package com.example.onkeylistenerproject;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
public class OnKeyListenerActivity extends Activity {
EditText edt = null;
TextView tv =null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_on_key_listener);
edt = (EditText) super.findViewById(R.id.edt);
tv = (TextView) super.findViewById(R.id.tv);
edt.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
String email = edt.getText().toString();
if(event.getAction()==KeyEvent.ACTION_UP){//键盘松开
if(email.matches("\\w+@\\w+(.com|.cn|.org|.edu)")){//进行正则的验证
tv.setText("输入的为正确的邮箱格式");
}else{
tv.setText("输入的邮箱格式有问题");
}
}
return false;
}
});
}
}
2.3 Résumé
(1) Les expressions régulières peuvent être utilisées dans le composant d'entrée pour vérifier la saisie des données ;
(2) Les événements clavier sont des opérations déclenchées lorsque les utilisateurs saisissent des données.
3. Touchez l'événement
3.1 Points de connaissance
(1) Comprendre les formes de fonctionnement de base des événements tactiles ;
(2) Vous pouvez utiliser des événements tactiles pour effectuer des opérations de dessin de base.
3.2 Détails spécifiques
Bien entendu, OnTouchListener lui-même est également une interface d'écoute fournie par Android. Elle est peu utile pour le développement Android réel et convient généralement au développement de jeux.
Exemple : Obtenez les coordonnées du point de contact.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context=".OnTocuhListenerActivity" >
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
package com.example.ontouchlistenerproject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class OnTocuhListenerActivity extends Activity {
TextView tv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_on_tocuh_listener);
tv = (TextView) super.findViewById(R.id.tv);
tv.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
tv.setText("X轴:"+x+",Y轴:"+y);
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.on_tocuh_listener, menu);
return true;
}
}
Si vous souhaitez donner à l'événement OnTouch des effets plus pratiques, tels que dessiner des lignes sur l'écran en touchant, vous pouvez le faire via certaines opérations de dessin. Ensuite, si vous souhaitez terminer l'opération de dessin, vous devez personnaliser un nouveau composant. Puisqu'il s'agit d'une classe de composants, elle doit hériter de la classe View.
Vague
package com.example.myView;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
public class MyView extends View {
private List<Point> allPoint = new ArrayList<Point>();
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
//在实例化这个组件的同时就进行触摸事件的监听
super.setOnTouchListener(new OnTouchListenerImpl());
}
protected void onDraw(Canvas canvas){
Paint p = new Paint();//画线依靠此类,相当于画笔类
p.setColor(Color.RED);//设置画笔颜色
if(MyView.this.allPoint.size()>0){//如果存在坐标点的话,就可以开始绘制图形
Iterator<Point> it = MyView.this.allPoint.iterator();
Point frist = null;
Point last = null;
while(it.hasNext()){
if(null==frist){
frist = it.next();
}else{
if(last!=null){//当一段线段接收之后,下端开始的点将会是本段中结束的点
frist = last;
}
last = it.next();
canvas.drawLine(frist.x, frist.y, last.x, last.y, p);
}
}
}
}
class OnTouchListenerImpl implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event) {
Point p = new Point((int)event.getX(),(int)event.getY());
if(event.getAction()==MotionEvent.ACTION_DOWN){//如果是触摸下去,就开始保存坐标
MyView.this.allPoint.add(p);
}else if(event.getAction()==MotionEvent.ACTION_UP){//如果手指松开,进行画线
MyView.this.allPoint.add(p);
MyView.this.postInvalidate();//重新绘制图形
}else if(event.getAction()==MotionEvent.ACTION_MOVE){//手指一动
MyView.this.allPoint.add(p);
MyView.this.postInvalidate();//重新绘制图形
}
return true;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<com.example.myView.MyView
android:id="@+id/mv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
package com.example.ontouchlistenerproject;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;
public class OnTocuhListenerActivity extends Activity {
TextView tv = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myview_layout);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.on_tocuh_listener, menu);
return true;
}
}
3.3 Résumé
(1) Les événements tactiles sont des événements générés après que l'utilisateur touche l'écran ;
(2) Si l'utilisateur souhaite utiliser des événements tactiles pour dessiner des graphiques, il doit écrire un composant de dessin personnalisé.