该说,下了两天的雨,这绝对爽死了是吧..今早看来是睡得最惬意最容易让人懒床的一天呢,课一天休一天,这个肯定会惯坏我们的...
不认真了呢,你看你,好习惯都坚持这么久了,最近却要慢慢颓废不写博客了的样子,,泥煤的,不是按理来说新养2周以上的习惯就已经能让你成型的么,我这都两个月以上了,却在这阵子还慢慢地拖拉下来,这什么性格喂讨厌!天蝎座会这样么?天蝎座会有点“有新就颓废旧”么?奶奶个熊,反正就是有新东西左右我了才会也改变了长久以来的好习惯吧,,
回顾一下从上篇到现在的一周我为什么没写。。13因为老师第一次带着大家变讲边一起写,所以那天很兴奋才晚上写了博客的,14休肯定是玩去了,因为假时感觉写不了什么东西,.15到17的周六到周一上课,16号父亲节(我那忙碌的为家庭奔波的老爸啊!)...15号竟然没翻到笔记,好吧忘了课程了,也估计就是这天我U盘坏了读不起的原因吧(可恶的水货!)
16号的是讲了事件处理,哦对主要写的是个计算器界面,实现简单的科学的从左到右依次计算,截取符号的方式:
基于监听的事件处理和基于回调的事件处理(java是事件委托模型)
事件源,监听器(处理事件)
安卓特有的回调处理,自己处理
监听器处理方式:
Activity本身作为事件监听器
匿名内部类
外部类
内部类
直接绑定到标签(在xml里,某要实现事件,有熟悉Click=“click”),再在Activity里写个void click(View v){}方法。
MVC模式。C:control,控制器事件处理
回调事件处理:如自定义个组件,里面可重写自己想要实现的方法,可包括如点击事件onTouchEvent,xml里直接用,界面里可直接实现处理
手势(Gesture)触
手势检测,需创建类GestureDetector,重写方法OnGestureListener监听器对象
onDown;onFling(4参数);onLongPress;onScroll;onShowPress;onSingletapUp;(implements OnGestureListener即可)
onFling要实现,还要重写onTouchEvent方法,修改返回为gestureDetector.onTouchEvent(event)
关键代码:
// 获取数字键和计算键的值并显示到文本框里
public void input(View v) {
Button btn = (Button) v;
String btnStr = btn.getText().toString();
et = (EditText) findViewById(R.id.editText1);
String contentText = et.getText().toString();
contentText += btnStr;
et.setText(contentText);
// 设置光标在末尾,即下标的index是字符串的长度
et.setSelection(contentText.length());
if ("+".equals(btnStr) || "-".equals(btnStr) || "×".equals(btnStr)
|| "÷".equals(btnStr)) {
flagList.add(btnStr);
}
}
// 等于,计算
public void dengyu(View v) {
String text = et.getText().toString();
String[] strs = text.split("(\\+)|[-×÷]");
// int content = 0;
// if (text.indexOf("+") != -1) {
// String[] texts = text.split("\\+");// 以+分割
//
// if (texts.length == 2) {
// content = Integer.parseInt(texts[0])
// + Integer.parseInt(texts[1]);
// }
// } else if (text.indexOf("-") != -1) {
// String[] texts = text.split("\\-");// 以+分割
//
// if (texts.length == 2) {
// content = Integer.parseInt(texts[0])
// - Integer.parseInt(texts[1]);
// }
// } else if (text.indexOf("×") != -1) {
// String[] texts = text.split("\\×");// 以+分割
//
// if (texts.length == 2) {
// content = Integer.parseInt(texts[0])
// * Integer.parseInt(texts[1]);
// }
// }
// //bug:得数怎么让其显示为小数呢?若前面content定义为double,则每次计算都有“.0”什么的。看着烦
// else if (text.indexOf("÷") != -1) {
// String[] texts = text.split("\\÷");// 以+分割
//
// if (texts.length == 2) {
// content = Integer.parseInt(texts[0])
// / Integer.parseInt(texts[1]);
// }
// }
// et.setText(content + "");
int result = Integer.parseInt(strs[0]);
for (int i = 0; i < flagList.size(); i++) {
if ("+".equals(flagList.get(i))) {
result += Integer.parseInt(strs[i + 1]);
} else if ("-".equals(flagList.get(i))) {
result -= Integer.parseInt(strs[i + 1]);
} else if ("×".equals(flagList.get(i))) {
result *= Integer.parseInt(strs[i + 1]);
} else if ("÷".equals(flagList.get(i))) {
result /= Integer.parseInt(strs[i + 1]);
}
}
et.setText(result+"");
et.setSelection(et.length());
System.out.println(result);
flagList.clear();
}
17号(对了,观摩反编译代码的memo的编译文本界面,我还没实现换行线..所以就不贴代码了..):
昨天的事件,事件监听器,接触的比较多的是onclicklistener,还有其他的课官网去查,利用java提供是委托事件模型,自创;回调机制,不会实现监听器,谁发出谁处理,可自定义组件,写方法,一般要重写3个构造方法
手势:implements OnGestureListener,onfling方法(4参数:开始,结束,横纵向速率)
左右切换欢迎界面,首先int数组各图片位置,交给手势管理器去处理,new OnGestureDetector,setImageDrawable是传对象,xxxresource是传ID。有方法linearLayout.getChildAt(index),获取几。
今天,继续读几下备忘录程序代码。今天主要实现从右到左实现跳出删除按钮,并写编辑界面,包括划行线。
MemoEdited,
右上,Hierarchy View看布局。
ui里新包(窗口组件)widget,IphoneEditText extends EditText(3构造方法),IphoneMemoLinedEditText extends IphoneEditText (3构造方法); 【一大波。。看代码吧】
又讲怎么获取系统信息。安卓又限制不能再子线程里改组件状态等
(第六章ppt)
响应系统设置 Configuration类
消息传送机制 Handle:再新启动线程中发送消息void sendMessage,再主线程煮获取并处理消息void
作业:1.memo程序的按钮删除,只一行
2.某图片(组件)的移动,如点击某按钮后,自动移动(改变margingleft和top):
/**
* Configuration 的一些些
* @author Administrator
*
*/
public class An0617Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.main_textview_1);
String configStr = "";
Configuration config = getResources().getConfiguration();
configStr +="fontScale字体缩放因子"+ config.fontScale + "\n";
configStr +="keyboard键盘类型"+ config.keyboard + "\n";
configStr +="地区"+ config.locale + "\n";
configStr +="导航"+ config.navigation + "\n";
configStr +="111"+ config.orientation+ "\n";
configStr +="222"+ config.touchscreen + "\n";
}
}
讲了Handler:
/**
* 自写Handler类
*
* @author Administrator
*
*/
public class ChangeImageHandle extends Handler {
private int[] images = new int[] { R.drawable.whatsnew_fornew_01,
R.drawable.whatsnew_fornew_02, R.drawable.whatsnew_fornew_03,
R.drawable.whatsnew_fornew_04, R.drawable.whatsnew_fornew_05 };
private ChangeImageActivity activity;
public ChangeImageHandle(ChangeImageActivity activity) {
// 构造方法
this.activity = activity;
}
/**
* 这是些什么?!
*/
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
if (msg.what == ChangeImageActivity.CHANGE_IMAGE) {
ImageView imageView = (ImageView)activity.findViewById(R.id.change_image_main_image1);
Log.i("imgsadfdsfsdf", imageView+"");
imageView.setImageResource(images[msg.getData().getInt("index")]);
}
}
}
/**
* 关于Handel,切换图片的类
*
* @author Administrator
*
*/
public class ChangeImageActivity extends Activity {
public static final int CHANGE_IMAGE = 1;
private Handler handler;// 导os包
private int index = 0;
private boolean isRun = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.change_image_main);
// handler = new Handler() {
// @Override
// public void handleMessage(Message msg) {
// super.handleMessage(msg);
// if (msg.what == CHANGE_IMAGE) {
// ImageView imageView = (ImageView)
// findViewById(R.id.change_image_main_image1);
// imageView.setImageResource(images[index]);// 这个images是哪来的?
// }
// }
// };
handler = new ChangeImageHandle(this);
Button btn1 = (Button) findViewById(R.id.change_image_main_btn1);
// 实现事件
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new Thread() {
@Override
public void run() {
isRun = true;
for (index = 0; index < 5; index++) {
Message msg = new Message();
msg.what = CHANGE_IMAGE;
// 创建存放数据的map对象
Bundle bundle = new Bundle();
bundle.putInt("index", index);
msg.setData(bundle);
handler.sendMessage(msg);
if (isRun ==false) {
return;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (index == 4) {
index = 0;
}
}
}
}.start();
}
});
Button btn2 = (Button) findViewById(R.id.change_image_main_btn2);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
isRun = false;
}
});
}
}
18号修回学校,作业要做的写出删除按钮的弹出效果都没写..主要是回去弄个盖章和关于校内英语四级没过情况的申述处理..哎呀这实在是让人揪心得很,这么简单的英语都考不过,我的英语白学了(你就没怎么学过英语好吧?)..这件事必定又是我人生几大后悔事之一了!(没有学位证泥煤啊!即使后面自考英语四级那多难啊,再说以后有那个心或者时间看英语么,早知道校内的这个这么简单的看一阵子书绝对能过的好吧,没前人指教个人的觉悟也不够啊),泥煤..再说吧.
19号昨天了,Activity的话,之前有看视频过的知识点,所以心理上在课上轻松了很多(话说这个疯狂安卓的pdf文档知识点顺序,我找的2种视频的知识点有些还没有,比较纠结;我是那种有预习上课才有成效的娃,没有能预习的感觉非常难受)
Activity 基本程序单元
应用程序组件简介
创建
生命周期
启动另外个activity
之间的数据传递
android应用程序组件简介:活动组件(Activity),服务组件(Service,基本和Activity一样,无界面,后台应用),广播接受者组件(Broadcast receivers),内容提供者(Content Providers,实现不同应用程序之间获取数据)
Activity基本的创建和配置,可视化交互界面,可继承ListActivity、MapActivity等,复写onCreate()方法,需在清单文件中声明。
AndroidManifest.xml:配4大组件
<manifest>根元素,属性*包是R的、xmlns、sharedUserId、*versionCode版本、*versionName名称、installLocation安装参数
第二层:Uses-sdk,<application>里才是activity
第三层Activity,各应用各自有Task任务栈
第四层intent-filter:android:priority优先级、action 、category
第五层service
activity的生命周期:
活动,栈顶,有焦点并可见,
暂停,失去焦点但可见
停止,
销毁
onCreate第一次启动时调用,可以进行组件的初始化,onStart,onResume焦点,恢复时也调,onRestart,onPause被其他打断,onStop,onDestroy销毁。
启动另外个Activity:startActivity和startActivityForResult
Intent,将数据封装到Bundle对象中传递
Intent intent=new Intent(ac.this,other.class);
Bundle bundle=new Bundle();
bundle.putSting("a111",信息);
intent.putExtra(bundle);//或者不需要Bundle,直接intent.putExtra("a111",信息);
startActivity(intent);
(若在第二界面有事件finish(),则自身销毁返回上个界面)
第二界面获取数据:Intent intent=getIntent();
intent.getStringExtra("a111");
作业:登陆(多用户,bean) 存款 取款 查询 推出 ATM机
用Intent传数据和打开新的Activity,就上面简单代码,明天会深入讲更多的吧.好吧今天得完成好作业了先
......说好的分析为啥没写博客呢?
嗯,其中一点应该有:入手同学刚买却不想要的平板,感兴趣的里面装了有3款音乐游戏,下歌并且试玩都搞了估计有一整下午时间,然后现在觉得那个OSU的歌比较不大众,还准备下点耳熟能详的(今天一定要作业做好了再弄),前几天玩OSU稍难的都很苦手呢,所以课间就可以成为戴耳机听歌提神的替代品了...然后前天发现机子里已有的弹钢琴的个应用,玩了下,哇塞,有1000多首歌,经典、流行、儿时、影视、动漫、游戏、红歌各种有,经典至贝多芬的,最新至今年4月的新动画OP红莲の弓矢,我擦咧看起来果断碉堡。。18号弹了一下午昨晚弹了大半夜有木有!
我知道玩久了是不好的事情,但是有个歌,比如很感伤的那种,自己谱出的效果震撼人心啊,那种感觉,虽不能达到人家那么身临其境般,也有能让人在这炎热酷暑里找到心中的凉意呢。比如弹的《团子大家族》,因为知道是经典动漫某某的,且看过了的顶尖催泪作,在曲中自然能回忆起当初看时可能流下个感人泪水吧。。。并且钢琴曲和一般我们听到的MP3感觉绝对不一样的!
看完第一季就不敢看后面的了...