Android开发之Drag&Drop框架实现拖放手势

时间:2022-12-17 03:39:19 作者:正杰礼太 综合材料 收藏本文 下载本文

“正杰礼太”通过精心收集,向本站投稿了7篇Android开发之Drag&Drop框架实现拖放手势,下面小编为大家整理后的Android开发之Drag&Drop框架实现拖放手势,欢迎阅读与借鉴!

篇1:Android开发UI之Button

前言

最近一直在讲androidUI控件的使用方式,这篇文章讲解一下基本上属于用处最广泛的控件之一的Button控件,如果有过其他平台开发经验的程序员,对按钮是不会陌生的。本篇文章首先讲解一下Android的Button控件的常用事件以及事件绑定和触发,再在Button控件中通过设定属性值来实现图文混排,这个功能是在项目中常用到的。

Button控件

Button继承了TextView。它的功能就是提供一个按钮,这个按钮可以供用户点击,当用户对按钮进行操作的时候,触发相应事件,如点击,触摸。

还有一个ImageButton,它继承自Button,可以在ImageButton中显示一个图片展示给用户看,并且对其Text属性设置值的时候是无效的,其它功能与Button一样。

常用事件

一般对于一个按钮而言,用的最多的就是点击事件,Button间接继承自View,而AndroidUI中的所有事件,都是定义在View中的。在本篇博客中,示例讲解的点击事件、触摸事件,其他事件的使用方式与此类似,只是触发的时机不同而已。此处分别需要实现View.OnClickListener、View.OnTouchListener接口的方法。

View.OnClickListener,需要实现onClick(View v)方法,其中v为当前触发事件的控件。

View.OnTouchListener,需要实现onTouch(View v , MotionEvent event),其中v为当前触发事件的控件,event包括了触摸时的具体内容,如移动、按下等。

下面使用一个示例讲解一下事件的绑定及触发,在示例中显示两个按钮控件,一个为普通按钮,一个为填充图片的按钮,为它们绑定click事件,当点击事件触发的时候,对其尺寸进行修改,为图片按钮绑定触摸事件,当触摸的时候触发,切换图片显示。

布局代码:

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical” >

android:id=“@+id/btnChangeSize”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“点击修改尺寸”

/>

android:id=“@+id/btnChangeImg”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:background=“@drawable/image1”

/>

实现代码:

package com.bgxt.buttondemo;

import android.app.Activity;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.View.OnTouchListener;

import android.widget.Button;

//通过实现接口,对其进行click、touch事件的支持

public class ButtonListener extends Activity implements OnClickListener,

OnTouchListener {

private Button btnChangeSize;

private Button btnChangeImg;

private int flag = 1;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.btn_listener);

btnChangeSize = (Button) findViewById(R.id.btnChangeSize);

btnChangeImg = (Button) findViewById(R.id.btnChangeImg);

// 对两个按钮进行事件绑定

btnChangeSize.setOnClickListener(this);

btnChangeImg.setOnClickListener(this);

btnChangeImg.setOnTouchListener(this);

}

@Override

public boolean onTouch(View v, MotionEvent event) {

// 获取触发事件的Button控件

Button btn = (Button) v;

if (event.getAction == MotionEvent.ACTION_UP) {

// 当触摸时按下,则替换展示图片为image1

btn.setBackgroundResource(R.drawable.image1);

} else {

btn.setBackgroundResource(R.drawable.image2);

}

return false;

}

@Override

public void onClick(View v) {

Button btn = (Button) v;

if (flag == 1

&& btn.getWidth() == getWindowManager().getDefaultDisplay()

.getWidth()) {

// 如果等于屏幕的宽度,则修改标识flag为-1

flag = -1;

} else if (flag == -1 && btn.getWidth() < 100) {

flag = 1;

}

篇2:Android开发之ProgressDialog的使用

ProgressDialog类似于ProgressBar类,

用于显示一个过程,通常用于耗时操作。

几个方法介绍:

1.setMax()

设置对话框中进度条的最大值。

2.setTile()

设置标题。

3.setProgressStyl()

设置对话框中进度条的样式。例如:环形和水平。

参数:

ProgressDialog.STYLE_SPINNER 环形精度条

ProgressDialog.STYLE_HORIZONTAL 水平样式的进度条

4.setMessage()

设置显示的内容。

演示实例:

用于模拟一个耗时的连接操作。

图:

MainActivity.java

public class MainActivity extends Activity { Button button, button2; ProgressDialog progressDialog; public final static String ABOUT_SERVER = “Connect”; // 信息广播接收 BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context c, Intent intent) { String str = intent.getStringExtra(“DATA”); if (str.equals(“0”)) { progressDialog.setMessage(“开始连接”); } else if (str.equals(“1”)) { progressDialog.setMessage(“连接完毕”); } else { progressDialog.dismiss(); } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 注册广播监听 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ABOUT_SERVER); registerReceiver(broadcastReceiver, intentFilter); } public void click(View v) { progressDialog = new ProgressDialog(MainActivity.this); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setMessage(“准备建立连接·············”); progressDialog.show(); Intent intent = new Intent(MainActivity.this, ServerActivity.class); startService(intent); }}activity_main.xml

ServerActivity.java

public class ServerActivity extends Service { Handler handler = new Handler() { public void handleMessage(Message msg) { Intent intent = new Intent(MainActivity.ABOUT_SERVER); if (msg.what == 0) { intent.putExtra(“DATA”, “0”); } else if (msg.what == 1) { intent.putExtra(“DATA”, “1”); } else { intent.putExtra(“DATA”, “2”); ServerActivity.this.stopSelf(); } sendBroadcast(intent); }; }; @Override public void onCreate() { super.onCreate(); Thread thread = new Thread(new Runnable() { @Override public void run() { // 要做的事 try { for (int i = 0; i < 3; i++) {Thread.sleep(1000);Message message = new Message();message.what = i;handler.sendMessage(message); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); thread.start(); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; }}AndroidManifest.xml

在做此实例时,遇到报错,一大串红字,最关键的一句话:

This message is already in use.

从网上查得:与handler发送Message相关,消息已经在消息队列了,而且正被使用,而如果往同一个队列发送相同的对象就会报错,

电脑资料

造成这个错误是因为:

final Message message = new Message(); Thread thread = new Thread(new Runnable() { @Override public void run() { // 要做的事 try { for (int i = 0; i < 3; i++) {Thread.sleep(1000);message.what = i;handler.sendMessage(message); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); thread.start();使用了同一个Message。用的API 19(4.4)与4.4模拟器,不显示错误,只是卡住,用的API 19(4.4)与2.2模拟器就报错了。

篇3:Android开发之TextView高级应用

我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此,下面就和大家分享一下TextView的一些使用技巧。

Android中设置文本样式的几种方法:

1.将android:autoLink属性值设为true。系统会自动识别E-mail、电话、网址等特殊文本。

2.使用Html标签,例如,、等。不要设置 android:autoLink 属性。

3.在Java代码中直接使用Span对象来设置文本样式。这种方法需要将文本转换成一个SpannableString或SpannableStringBuilder对象,然后在SpannableString或SpannableStringBuilder对象中使用setSpan方法将要设置样式的文本转换成相应的Span对象。

4.在字符串资源中使用标签(只支持标签)设置可单击的链接,不要设置android:audoLink属性。

上面4种方法只要涉及单击动作,就必须使用TextView.setMovementMethod方法设置相应的MovementMethod对象。

1.在TextView中显示图像

我们浏览网的时候,上面的有很多图文并茂的文章,这些文章大部分都是从服务器的数据库中取出并显示在网页上的。那么如何在网页上显示图文并茂的文章呢?有过Java Web或.NET开发经验的人,会说用s:textfield或asp:label绑定。用它们是因为它们可以将标签的src对应的图像地址(也是图像资源的唯一标识)直接交给浏览器出处理。这样就可以将的src对应的图片显示出来。

那么,在Android中如何用TextView显示图片呢?

在解析Html标签来方面Android系统没有浏览器那么强大,Android系统不会直接根据src属性说指向的的值自动获取并显示图片,这一切都需要我们来帮它来完成。说白了,src属性指的是什么只有开发者自己知道。开发者需要告诉系统src属性到底指的是什么,然后系统才会知道怎么做。

解析src属性值需要ImageGetter对象的getDrawable方法来完成。ImageGetter是一个接口。使用Html.fromHtml会使这一过程变得简单。(关于Html.fromHtml的介绍)

txtShow=(TextView)findViewById(R.id.txtShow);

String htmlText=“小黄人1号:” +“小黄人2号:”+“小黄人3号:”;

txtShow.setText(getSpanned(htmlText));/**

*将Html解析成样式文本

*@return spanned Spanned

* */

private Spanned getSpanned(String htmlText) {

//TODO Auto-generated method stub

Spanned spanned=Html.fromHtml(htmlText,new ImageGetter { @Override

public Drawable getDrawable(String source) {

//TODO Auto-generated method stub

//装在图像资源

Drawable drawable=getResources().getDrawable(getResourceId(source));

if(source.equals(“blog.csdn.net/fengyuzhengfan/article/details/xiaohuangren1”)) {

//设置图像的缩放

drawable.setBounds(0, 0, 56, 56);

}elseif(source.equals(“blog.csdn.net/fengyuzhengfan/article/details/xiaohuangren2”)) {

//设置图像的缩放

drawable.setBounds(0, 0, 36, 36);

}elseif(source.equals(“blog.csdn.net/fengyuzhengfan/article/details/xiaohuangren3”)) {

//设置图像缩放到原来的75%

drawable.setBounds(0, 0,(int) (drawable.getIntrinsicWidth()*0.75),

(int) (drawable.getIntrinsicHeight()*0.75));

}

return drawable;

}

},null);

return spanned;

}

/**

*利用反射技术从R.drawable类中通过图像资源文件名获得相应图像资源的ID

*@param name String图像资源名

*@return图像资源ID int

* */

protectedint getResourceId(String name) {

//TODO Auto-generated method stub

try {

//根据资源ID的变量名(也就是图像资源的文件名)获取Field对象

Field field=R.drawable.class.getField(name);

//取得并返回资源ID的值

return Integer.parseInt(field.get(null).toString());

}catch (Exception e) {

//TODO: handle exception

}

return 0;

}

2.单击TextView中的内容打开指定Activity

虽然TextView可以自动识别特殊文本(网址、电话号、E-mail等),并可以通过单击触发不同的动作,但是如果开发者想通过单击链接来显示指定的组件(如Activity、Service等)那么怎么来实现呢?

TextView自动识别的网址、电话号、E-mail等,都是在ClickableSpan类的onClick方法中通过Action调用相应的组件来实现的。现在我们就采用类似的方法,通过自己实现onClick方法来达到自定义自定义单击动作的目的。

/**

*单击TextView中的内容启动指定组件

* */

privatevoid launchComponentByTextView() {

//TODO Auto-generated method stub

txtLink=(TextView)findViewById(R.id.txtLink);

String str=“单击我启动一个Activity”;

//将文本转换成SpannableString对象

SpannableString spannableString=new SpannableString(str);

//将spannableString所有文本设置成ClickableSpan对象,并实现onClick方法

spannableString.setSpan(new ClickableSpan() {

@Override

publicvoid onClick(View widget) {

//TODO Auto-generated method stub

//启动指定Activity

Intent intent=new Intent(MainActivity.this, SecondActivity.class);

startActivity(intent);

}

}, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

txtLink.setText(spannableString);

//在单击链接时凡是要执行的动作,都必须设置MovementMethod对象

txtLink.setMovementMethod(LinkMovementMethod.getInstance());

}实例分析:

篇4:android NFC开发

先说说NFC开发总结,看了几天NFC开发资料,搜集了不少关于这方面的资料、demo、以及他人的总结,以下有部分是摘录总结的。因为要是现在总结也是那些,最后附送代码。关于demo我也有,有需要在评论去发邮箱给我。

一、NFC的配置总结

第一:屏幕没有锁住 。 第二:NFC功能已经在设置中打开

当系统检测到一个NFC标签的时候,他会自动去寻找最合适的activity去处理这个intent.

NFC发出的这个Intent将会有三种action:

ACTION_NDEF_DISCOVERED:当系统检测到tag中含有NDEF格式的数据时,且系统中有activity声明可以接受包含NDEF数据的Intent的时候,系统会优先发出这个action的intent。

ACTION_TECH_DISCOVERED:当没有任何一个activity声明自己可以响应ACTION_NDEF_DISCOVERED时,系统会尝试发出TECH的intent.即便你的tag中所包含的数据是NDEF的,但是如果这个数据的MIMEtype或URI不能和任何一个activity所声明的想吻合,系统也一样会尝试发出tech格式的intent,而不是NDEF.

ACTION_TAG_DISCOVERED:当系统发现前两个intent在系统中无人会接受的时候,就只好发这个默认的TAG类型的

二、NFC相关androidManifest文件设置

首先是权限:

然后是sdk级别限制:我个人建议API11开始比较合适:

如果是API8,在代码中,nfc功能设置的代码会出错,要抛出

例如:

NfcAdapter mAdapter = NfcAdapter.getDefaultAdapter(this);

mAdapter.isEnabled()

接着是特殊功能限制:

这个生命可以让你的应用在googleplay上被声明使用者必须拥有nfc功能。

三、NFC标签过滤,也在androidManifest文件设置

在activity的intent过滤xml声明中,你可以同时声明过滤这三种action.但是由之前所说,你应该知道系统在发送intent的时候是有优先级的,所以你最好清楚自己最想处理哪个。

1:过滤ACTION_TAG_DISCOVERED:

这个最简单,也是最后一个被尝试接受intent的选项。

2:过滤ACTION_NDEF_DISCOVERED:

其中最重要的应该算是data的mimeType类型了,这个定义的越准确,intent指向你这个activity的成功率就越高,否则系统可能不会发出你想要的NDEF intent了。下面在讲如何使用NDEF写入NFC标签的时候会多举几个类型的例子。

3:过滤ACTION_TECH_DISCOVERED:

你首先需要在你的

/res/xml下面创建一个过滤规则文件。名字任取,比如可以叫做nfc_tech_filter.xml。这个里面定义的是nfc实现的各种标准,每一个nfc卡都会符合多个不同的标准,个人理解为这些标准有些相互之间也是兼容的。你可以在检测到nfc标签后使用getTechList()方法来查看你所检测的tag到底支持哪些nfc标准。

一个nfc_tech_filter.xml中可以定义多个结构组。

android.nfc.tech.IsoDepandroid.nfc.tech.NfcAandroid.nfc.tech.NfcBandroid.nfc.tech.NfcFandroid.nfc.tech.NfcVandroid.nfc.tech.Ndefandroid.nfc.tech.NdefFormatableandroid.nfc.tech.MifareClassicandroid.nfc.tech.MifareUltralight

在androidManifest文件中声明xml过滤的举例如下:

四、看具体代码:

1、主要代码实现如下:

package org.reno.Beam;import java.io.ByteArrayOutputStream;import java.nio.charset.Charset;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Locale;import org.nfc.read.ParsedNdefRecord;import android.app.Activity;import android.app.AlertDialog;import android.app.PendingIntent;import android.content.DialogInterface;import android.content.Intent;import android.nfc.NdefMessage;import android.nfc.NdefRecord;import android.nfc.NfcAdapter;import android.nfc.Tag;import android.nfc.tech.MifareClassic;import android.nfc.tech.MifareUltralight;import android.os.Bundle;import android.os.Parcelable;import android.provider.Settings;import android.widget.TextView;public class MainActivity extends Activity { private static final DateFormat TIME_FORMAT = SimpleDateFormat .getDateTimeInstance(); private NfcAdapter mAdapter; private PendingIntent mPendingIntent; private NdefMessage mNdefPushMessage; private TextView promt; private AlertDialog mDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); promt = (TextView) findViewById(R.id.promt); resolveIntent(getIntent()); mDialog = new AlertDialog.Builder(this).setNeutralButton(“Ok”, null) .create(); // 获取默认的NFC控制器 mAdapter = NfcAdapter.getDefaultAdapter(this); //拦截系统级的NFC扫描,例如扫描蓝牙 mPendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); mNdefPushMessage = new NdefMessage(new NdefRecord[] { newTextRecord(“”, Locale.ENGLISH, true) }); } @Override protected void onResume() { super.onResume(); if (mAdapter == null) { if (!mAdapter.isEnabled()) { showWirelessSettingsDialog(); } showMessage(R.string.error, R.string.no_nfc); promt.setText(“设备不支持NFC!”); return; } if (!mAdapter.isEnabled()) { promt.setText(“请在系统设置中先启用NFC功能!”); return; } if (mAdapter != null) { //隐式启动 mAdapter.enableForegroundDispatch(this, mPendingIntent, null, null); mAdapter.enableForegroundNdefPush(this, mNdefPushMessage); } } @Override protected void onPause() { super.onPause(); if (mAdapter != null) { //隐式启动 mAdapter.disableForegroundDispatch(this); mAdapter.disableForegroundNdefPush(this); } } //16进制字符串转换为String private String hexString = “0123456789ABCDEF”; public String decode(String bytes) { if (bytes.length() != 30) { return null; } ByteArrayOutputStream baos = new ByteArrayOutputStream( bytes.length() / 2); // 将每2位16进制整数组装成一个字节 for (int i = 0; i < bytes.length(); i += 2) baos.write((hexString.indexOf(bytes.charAt(i)) << 4 | hexString .indexOf(bytes.charAt(i + 1)))); return new String(baos.toByteArray()); } // 字符序列转换为16进制字符串 private static String bytesToHexString(byte[] src, boolean isPrefix) { StringBuilder stringBuilder = new StringBuilder(); if (isPrefix == true) { stringBuilder.append(“0x”); } if (src == null || src.length <= 0) { return null; } char[] buffer = new char[2]; for (int i = 0; i < src.length; i++) { buffer[0] = Character.toUpperCase(Character.forDigit( (src[i] >>>4) & 0x0F, 16)); buffer[1] = Character.toUpperCase(Character.forDigit(src[i] & 0x0F, 16)); System.out.println(buffer); stringBuilder.append(buffer); } return stringBuilder.toString(); } private void showMessage(int title, int message) { mDialog.setTitle(title); mDialog.setMessage(getText(message)); mDialog.show(); } private NdefRecord newTextRecord(String text, Locale locale, boolean encodeInUtf8) { byte[] langBytes = locale.getLanguage().getBytes( Charset.forName(“US-ASCII”)); Charset utfEncoding = encodeInUtf8 ? Charset.forName(“UTF-8”) : Charset .forName(“UTF-16”); byte[] textBytes = text.getBytes(utfEncoding); int utfBit = encodeInUtf8 ? 0 : (1 << 7); char status = (char) (utfBit + langBytes.length); byte[] data = new byte[1 + langBytes.length + textBytes.length]; data[0] = (byte) status; System.arraycopy(langBytes, 0, data, 1, langBytes.length); System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length); return new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data); } private void showWirelessSettingsDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(R.string.nfc_disabled); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) {Intent intent = new Intent( Settings.ACTION_WIRELESS_SETTINGS);startActivity(intent); } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialogInterface, int i) {finish(); } }); builder.create().show(); return; } //初步判断是什么类型NFC卡 private void resolveIntent(Intent intent) { String action = intent.getAction(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action) || NfcAdapter.ACTION_TECH_DISCOVERED.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) { Parcelable[] rawMsgs = intent .getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); NdefMessage[] msgs; if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } } else { // Unknown tag type byte[] empty = new byte[0]; byte[] id = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); Parcelable tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG); byte[] payload = dumpTagData(tag).getBytes(); NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN,empty, id, payload); NdefMessage msg = new NdefMessage(new NdefRecord[] { record }); msgs = new NdefMessage[] { msg }; } // Setup the views buildTagViews(msgs); } } //一般公家卡,扫描的信息 private String dumpTagData(Parcelable p) { StringBuilder sb = new StringBuilder(); Tag tag = (Tag) p; byte[] id = tag.getId(); sb.append(“Tag ID (hex): ”).append(getHex(id)).append(“\\n”); sb.append(“Tag ID (dec): ”).append(getDec(id)).append(“\\n”); sb.append(“ID (reversed): ”).append(getReversed(id)).append(“\\n”); String prefix = “android.nfc.tech.”; sb.append(“Technologies: ”); for (String tech : tag.getTechList()) { sb.append(tech.substring(prefix.length())); sb.append(“, ”); } sb.delete(sb.length() - 2, sb.length()); for (String tech : tag.getTechList()) { if (tech.equals(MifareClassic.class.getName())) { sb.append('\\n'); MifareClassic mifareTag = MifareClassic.get(tag); String type = “Unknown”; switch (mifareTag.getType()) { case MifareClassic.TYPE_CLASSIC: type = “Classic”; break; case MifareClassic.TYPE_PLUS: type = “Plus”; break; case MifareClassic.TYPE_PRO: type = “Pro”; break; } sb.append(“Mifare Classic type: ”); sb.append(type); sb.append('\\n'); sb.append(“Mifare size: ”); sb.append(mifareTag.getSize() + “ bytes”); sb.append('\\n'); sb.append(“Mifare sectors: ”); sb.append(mifareTag.getSectorCount()); sb.append('\\n'); sb.append(“Mifare blocks: ”); sb.append(mifareTag.getBlockCount()); } if (tech.equals(MifareUltralight.class.getName())) { sb.append('\\n'); MifareUltralight mifareUlTag = MifareUltralight.get(tag); String type = “Unknown”; switch (mifareUlTag.getType()) { case MifareUltralight.TYPE_ULTRALIGHT: type = “Ultralight”; break; case MifareUltralight.TYPE_ULTRALIGHT_C: type = “Ultralight C”; break; } sb.append(“Mifare Ultralight type: ”); sb.append(type); } } return sb.toString(); } private String getHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (int i = bytes.length - 1; i >= 0; --i) { int b = bytes[i] & 0xff; if (b < 0x10) sb.append('0'); sb.append(Integer.toHexString(b)); if (i >0) { sb.append(“ ”); } } return sb.toString(); } private long getDec(byte[] bytes) { long result = 0; long factor = 1; for (int i = 0; i < bytes.length; ++i) { long value = bytes[i] & 0xffl; result += value * factor; factor *= 256l; } return result; } private long getReversed(byte[] bytes) { long result = 0; long factor = 1; for (int i = bytes.length - 1; i >= 0; --i) { long value = bytes[i] & 0xffl; result += value * factor; factor *= 256l; } return result; } //显示NFC扫描的数据 private void buildTagViews(NdefMessage[] msgs) { if (msgs == null || msgs.length == 0) { return; } // Parse the first message in the list // Build views for all of the sub records Date now = new Date(); List

records = NdefMessageParser.parse(msgs[0]); final int size = records.size(); for (int i = 0; i < size; i++) { TextView timeView = new TextView(this); timeView.setText(TIME_FORMAT.format(now)); ParsedNdefRecord record = records.get(i); promt.append(record.getViewText()); } } //获取系统隐式启动的 @Override public void onNewIntent(Intent intent) { setIntent(intent); resolveIntent(intent); }}

2、androidManifest配置

篇5:Android开发简历

Android开发简历模板

简历是用来求职的,招聘者需要找的人才,所以你要把我的优点重点的突出显示,要招聘者拿到你的简历就马上见到这一些优点,招聘者查看简历时间是有限的,如果在这10多秒时间内不能打动他,那你的简历可能就会被扔掉的了。所以你要做到的就是把重点的.内容放在第一页,并利用加粗或下划线等能让人注意的标记,适当的提示。

制作个人简历,最忌的就是搞了一份很厚多内容,页数很多的简历。正如上面所说,招聘者看简历时间有限,所以你的简历也一定要精简,第一就是页数上的精简,像简历封面、自荐信、学校介绍、专业介绍等及一些证书的复印件都不需要提供了。第二就是内容上也要精简,用简短有力的语句表达出重点的内容。其实招聘都最关心的问题,你会做什么?做过什么?有怎样的成绩,最后就会得出一个结论,你是否适合。

下面是yjbys小编分享的Android开发简历模板,更多内容请继续关注个人简历网。

个人信息

yjbys

目前所在地: 番禺区 民族: 汉族

户口所在地: 湖南 身材: 168 cm 58 kg

婚姻状况: 未婚 年龄: 34 岁

培训认证: 诚信徽章:

求职意向及工作经历

人才类型: 普通求职

应聘职位: 计算机软件:ERP/SAP系统工程师、软件工程师:Windows Mobile,Android,J2ME开发、嵌入式软件开发(Linux/单片机/DLC/DSP…):

工作年限: 8 职称: 无职称

求职类型: 全职 可到职日期: 一个星期

月薪要求: 5000--8000 希望工作地区: 广东省 北京 上海

个人工作经历:

公司名称: 起止年月:2005-03 ~ 2008-04广州市科思电脑系统公司

公司性质: 所属行业:

担任职务: 项目经理、软件工程师

工作描述: 负责企业ERP/SAP,MRP2,HR管理系统的开发与实施工作,多次带领开发团队深入企业,参与多家企业的ERP/SAP系统的设计与项目实施,成功完成了电子、服装等十多个行业公司企业的ERP/SAP系统的开发与实施任务。

离职原因:

公司名称: 起止年月:2004-02 ~ 2005-01广州市天河学院

公司性质: 所属行业:

担任职务: 计算机系教师

工作描述: 负责软件,网络计算机相关课程讲授,带领学生进行进行课程实验。

离职原因:

公司名称: 起止年月:2000-01 ~ 2004-01广州艾斯顿有限公司

公司性质: 所属行业:

担任职务: 电脑部主管,软件工程师

工作描述: 负责公司的电脑维护,网站维护,软件开发工作。

离职原因:

教育背景

毕业院校: 湖南常德电脑大学

最高学历: 本科 毕业日期: 1999-07-01

所学专业一: 计算机信息管理 所学专业二:

受教育培训经历:

起始年月 终止年月 学校(机构) 专 业 获得证书 证书编号

1992-09 1996-07 湖南常德机电工程学校(湖南常德职业技术学院) 机械电子 毕业证

1996-09 1999-07 湖南常德电脑大学 计算机信息管理 毕业证

2006-01 2007-01 广东外语外贸大学 商务英语 结业证

语言能力

外语: 英语 良好

国语水平: 优秀 粤语水平: 良好

工作能力及其他专长

1.精通Windows Mobile,WinCe手机系统软件开发,熟悉Android,J2Me系统设计。

2.精通C/C++VB/VC++,C++Builder/ABAP, EVC/WIN CE, SQL SERVER等编程语言, 有丰富的ERP/MRP/OA系统开发与实施经验,精通酒店信息管理系统的开发与维护,为多家企业成功设计开发了ERP/SAP系统软件和一百多家五星级酒店管理系统,赢得了客户广泛的好评。

2.熟识思科、华为等网络设备的安装与调试维护工作,精通RFID、嵌入式系统程序设计、嵌入式/上位机编程。

详细个人自传

精通Windows Mobile,WinCe手机系统软件开发,熟悉Android,J2Me系统设计,精通C/C++VB/VC++,C++Builder /SAP(ABAP), EVC/WIN CE,RFID、SQL SERVER等编程语言, 熟悉思科、华为等网络设备的安装与调试维护工作,为多家企业成功设计开发、完成实施ERP/SAP系统软件和一百多家五星级酒店管理系统,赢得了客户广泛的好评。

篇6:如何学习android开发

快速学习android开发方法

一、Java SE

编程Java 是一种面向对象的开发语言,安卓操作系统的应用层使用Java语言来开发,所以要想进行安卓开发必须有良好的Java基础。这一阶段的学习,要牢固掌握Java 中的基本语法,掌握面向对象的程序设计思想,及开发工具的使用。之后学习常用类,多线程等高级特性,学习Java网络编程,了解网络通讯结构,掌握数据库语言及JDBC对数据库的访问,了解数据结构与算法,设计模式,项目开发工具的使用等内容,为后续的学习打一夯实的基础。

二、安卓基础应用开发

这一阶段的学习主要是掌握安卓的系统架构,熟悉整个安卓开发环境的搭建,以及常用命令和工具的使用,熟练掌握Andoid的UI开发,包括使用标准控件,以及自定义各式各样的UI控件,配合动画部分的使用,让自己UI设计更加炫丽更加吸引。最后在自己的应用中植入广告,发布到Market中,享受收获的乐趣。

三、安卓核心组件开发

精通Android应用开发核心组件的使用,包括Acitivity窗口活动管理;连接各个组件起到通讯作用的Intent信使;存在于服务端不可见的Service组件;为数据提供共享的ContentProvider;之后要掌握Andorid中很实用的数据存储,以及复习Java中的网络技术,并将它结合到android的开发当中,特别是常用的http通信,以及XML,Json数据的解析。中间通过不同项目让我们去强化该部分的知识。

四、安卓深入开发

通过前面的三个阶段的学习,这一阶段主要是把前面的内容作为基础,结合一些实际的应用,让Android开发更加多样化,当然需要一些练习了,不妨可以尝试一下多媒体方面,如:音视频播放,照相机,闹钟等;常用设备方面,如:GPS,重力传感器,指南针等;还有基本的Android图形开发,绘制自己的View部件以及通过Bitmap对图片作一些处理。然后在此基础之上,学习高级的游戏开发引擎,2D,3D的图形处理。

0基础学习Android软件开发方法

1 编程语言的学习

安卓应用软件开发中有很多的编程语言可以使用,所以应该重点学习以下几种编程语言。

① C/C++语言。 C语言是一种结构化语言。它层次清晰,便于按模块化方法安排程序,易于调试和保护。它的功用丰盛、表达力强、运用活络便当、运用面广、政策程序高、可植入性好,既有高级语言的特征,又有低级语言的许多特征,适宜作为系统描绘语言,既能够用来编写系统软件,也能够用来编写运用软件。

② Java语言。以Java语言是安卓应用软件开发的基础语言,首先把握面向对象的基础设计准则,有了这些基础准则的支撑,就可以触类旁通。

2 基础应用开发的学习

掌握的安卓系统架构,熟悉整个安卓应用软件开发环境的搭建,以及的常用命令和工具的使用,熟练掌握安卓的UI开发,包括使用标准控件,以及自定义各式各样的UI控件,配合动画部分的使用,让自己UI设计更加炫丽更加吸引。

3 核心组件开发的学习

精通安卓应用软件开发核心组件的使用,包括Acitivity窗口活动管理;

连接各个组件起到通讯作用的Intent信使;

存在于服务端不可见的Service组件;

为数据提供共享的ContentProvider;

之后要掌握安卓应用软件中很实用的数据存储,以及复习Java中的网络技术,并将它结合到安卓应用软件当中,特别是常用的http通信,以及XML,Json数据的解析。

4 安卓论坛交流学习

国内可以去eoe,国外可以去stackoverflow。可以去code google上下载一些开源的安卓应用软件开发的项目,进行学习。

5 深入开发的学习

安卓应用软件开发实现更加多样化,可以尝试一下多媒体方面,如:音视频播放,照相机,闹钟等;常用设备方面,如:GPS,重力传感器,指南针等。

10个很棒的学习Android开发的网站

1、Android Developers

作为一个Android 开发者,官网的资料当然不可错过,从设计,培训,指南,文档,都不应该错过,在以后的学习过程中慢慢理解体会。

2、Android Guides - CodePath

CodePath 是国外一个技术培训机构,主要培训iOS 和Android 开发,而CodePath 将Android Guides 放在Github,已经获得了4000+ 个赞,对于Android 初学这特别适合,而且浅显易懂。

3、Android tutorial - TutorialSpoint

TutorialSpoint 是一个专业的技术教程网站,基本上我们所熟知的热门技术,都能在这里找到教程,知识点覆盖的特别全,而且代码风格也很不错,同时也适合初学着;更人性化的是,所有教程提供离线PDF 下载。

4、Android Development - Vogella

Vogella 提供的Android 开发教程也是可圈可点的,可能知识点覆盖不是特别全,但是单个知识点,Vogella 讲解的还是很详细的。

5、AndroidHive

AndroidHive 是一个个人博客,主要写Android 开发的教程,虽然只是一个人,但却提供了绘图,到写教程,功能视频演示,也表现出了博主的专业与敬业,博主写的东西也是跟随新技术,可实用性特别强。

6、Android SDK - Tuts+ Code

Tuts+ 是一个技术教程,课程和电子书的网站,基本上热门的技术都提供了,他的教程主要是免费的,而课程,电子书是有偿的,由于其专业性,大多教程都是高精华的。

7、Lynda

Lynda 是一个在线学习网站,该网站提供技术,设计等很多的课程。

8、Android Questions - Stack Overflow

Stackoverflow 是一个技术在线问答网站,几乎平常遇到的所有技术网站,在这里都能找到答案,而且你提问的问题,上面有很多大牛会很热心回答。

9、Search · android - Github

Github 是一个基于Git 的代码托管工具,几乎所有知名的开源软件都选择Github 来托管,而很多Android 开发者也都选择Github,几乎常见的Demo 在Github 都能找到类似的。

10、Android Archives | Java Code Geeks

Java Code Geeks 主要是一个Java 教程的网站,而他提供的Android 教程,一步一步,还有配图,使初学者没有太大压力。

篇7:Android开发之Handler和Looper的关系

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理,

Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行,

当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

Thread:线程,负责调度整个消息循环,即消息循环的执行场所。

如图所示,Handler负责将数据压栈到Message队尾中,并从队头取出数据,而Looper负责从队列中进行循环取出,得到Handler的数据。注意Looper必须是UI的Looper,我们才能对UI界面进行更新!

Android登陆界面采用文件存储实现

演讲手势

android定时器

Android 布局学习之――Layout(布局)详解一

框架协议范本

手势礼仪常识

android位置传感器

android实习总结报告模板

Android 源代码实例:实现上拉加载下拉刷新浮动效果

演讲手势运用技巧

Android开发之Drag&Drop框架实现拖放手势(共7篇)

欢迎下载DOC格式的Android开发之Drag&Drop框架实现拖放手势,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档