Android - traitement des transactions (suite) (13)

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é.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41830242/article/details/131323999
conseillé
Classement