Android学习(一)--第一个项目遇到的一些问题跟解决
来源:互联网 发布:工作日志软件哪个好 编辑:程序博客网 时间:2024/05/16 14:08
app总是崩溃
在刚开始时看《第一行代码》,想试试在创建项目的时候不create Activity,然而捣腾了一下午,发现连最简单的app(只显示一个TextView),总是被强制停止了。然后再创建项目,选择create Activity就正常运行了。估计是配置文件出了错误,还没去找。
知晓当前活动的方法
出自《第一行代码》
首先创建活动收集类,用来管理活动。
import java.util.ArrayList;import java.util.List;import android.app.Activity;public class ActivityCollector { public static List<Activity> activities=new ArrayList<Activity>(); public static void addActivities(Activity activity){ activities.add(activity); } public static void removeActivities(Activity activity){ activities.remove(activity); } public static void finishAll(){ for(Activity activity:activities){ if(!activity.isFinishing()) activity.finish(); } }}
接着创建基本的活动类,知晓当前活动主要是通过Log.d来输出。所以我们这个基本的活动类在onCreate()时输出活动名到日志
package com.example.fuckinghomework;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class BaseActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.d("BaseActivity", getClass().getSimpleName()); ActivityCollector.addActivities(this); } @Override protected void onDestroy(){ super.onDestroy(); Log.d("BaseActivity", getClass().getSimpleName()); ActivityCollector.removeActivities(this); }}
之后只要将所有的活动类继承这个类就好了。
Layout
RelativeLayout
已经用过的只有RelativeLayout,这个是可以通过距离,相对位置等信息来放置控件在屏幕上的位置,属性非常多,常用的有android:layout_alignParentLeft=”true”这种,即跟xxx的上/下/左/右对齐,这里是跟父布局的左边对齐。android:layout_below=”@+id/xxx”放在xxx的下面。还有其他可以通过距离来设定的,不过兼容性不太好,在分辨率不同的屏幕上效果相差甚远
LinearLayout
没怎么用,感觉比较难用。线性排列
一些控件
TextView
显示当前文本。通过setText(“String”);可以修改显示的内容。setSize(int)修改字号,setColor(int)设置颜色,颜色用的是16进制的,上网查。
Button
按钮,可以通过在代码中addOnClickListener也可以在xml文件中添加一个函数来写按钮事件。注意如果是要在代码中写addOnClickListener的话要import view.View.OnClickListener; 有时按eclipse的提示来添加添加的不是这个包,就会报错。
EditText
可以输入的文本框。在xml中添加android:hint="xxx"
可以添加输入提示
android:maxLines="1"
即将文本框的最大行数设为1行,超过一行之前的文本则会向上滚动 editText.getText().toString()
–获取文本框的输入,并转化为字符串
ImageView
图片控件,在上面可以添加图片
imageView.setImage(R.drawable.foo);
将图片设置到imageView上
imageView.setBackground(R.drawable.foo);
将foo设为背景
帧动画
在做这个项目时需要用到动画片那种动画效果,选择了AnimationDrawable这个类,为帧动画,即将很多画面连起来播放,形成动画的效果,不过这个只能用在小图,少图的情况下,一般手机拍摄,电脑下的高清图都很大的,不处理非常容易OOM,然而也没有比较好的处理方法,经查也就提前压缩,或者是先将图片放入内存,不过这样貌似不适合于帧动画,因为我学到的帧动画的设置是先将图片放入drawable-hdpi这些文件下,然后在res/drawable下新建resource type为drawable,Root element为animation-list的xml文件。
添加item。duration 为图片显示的时间长度
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/phase_1111" android:duration="50"> </item> <item android:drawable="@drawable/phase_2111" android:duration="50"> </item> <item android:drawable="@drawable/phase_3111" android:duration="50"> </item> <item android:drawable="@drawable/phase_2111" android:duration="50"> </item> <item android:drawable="@drawable/phase_1111" android:duration="50"> </item></animation-list>
本来想连续播放手机拍摄的图片,但帧动画无法满足(图片多且大,34张,平均每张1M)。就只是通过压缩,然后setImageBitmap的方法来播放。压缩图片的方法在谷歌官网有
package com.example.fuckinghomework;import android.app.Activity;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;public class HandlePicture extends Activity{ /** *计算压缩的比 *reqWidth,reqHeight为目标宽高 *这里做了修改,因为我的图片可能是横的 *选择比例小的,这样压缩后才全部在要求范围内 */ public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight){ final int height=options.outHeight; final int width=options.outWidth; int inSampleSize=1; if(height>width){ if(height>reqHeight||width>reqWidth){ final int heightRatio=Math.round((float)height/(float)reqHeight); final int widthRatio=Math.round((float)width/(float)reqWidth); inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio; } }else{ if(width>reqHeight||height>reqWidth){ final int heightRatio=Math.round((float)width/(float)reqHeight); final int widthRatio=Math.round((float)height/(float)reqWidth); inSampleSize=heightRatio<widthRatio?heightRatio:widthRatio; } } return inSampleSize; } /** *返回位图 */ public static Bitmap decodeSampleBitmapFromResource(Resources res,int resId,int reqWidth,int reqHeight){ final BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true;//设为true则只解析图片,不将其加载到内存 BitmapFactory.decodeResource(res, resId,options); options.inSampleSize=calculateInSampleSize(options,reqWidth,reqHeight); options.inJustDecodeBounds=false; return BitmapFactory.decodeResource(res, resId,options); }}
先将图片加载到内存的方法,一种是软引用,查到说现在很少用就没看,另一种是LruCache,但网上的代码不知道为什么不行,没时间就放弃了找问题,毕竟内存这块完全不懂
ProgressBar
进度条
圆形进度条
<ProgressBarandroid:id="@+id/progress_bar"android:layout_width="match_parent"android:layout_height="wrap_content"/>
水平进度条
<ProgressBarandroid:id="@+id/progress_bar"android:layout_width="match_parent"android:layout_height="wrap_content"style="?android:attr/progressBarStyleHorizontal"android:max="100"/>
max为进度条的最大值。
代码中可以通过getProgress()来获取当前的进度,setProgress(int)来设置当前的进度
控件三种属性
View.VISIBLE,可见。View.INVISIBLE,不可见,仍在那里,透明了。View.GONE不占据屏幕的任何位置了。
方法–setVisiblity(int);
一些小问题
遇到一个问题是说ProgressBar不能转化为TextView的,后来看了xml代码发现,TextView的声明放在了ProgressBar的下面,而我的progressBar中又有android:layout_below="@+id/textView"
。将TextView声明移到上面去就好
添加音乐
MediaPlayer mMediaPlayer==MediaPlayer.create(this, R.raw.music1); try{ mBackgroundPlayer.prepare(); }catch(IllegalStateException e){ } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } mBackgroundPlayer.start(); mBackgroundPlayer.setOnCompletionListener(new OnCompletionListener(){ @Override public void onCompletion(MediaPlayer arg0) { arg0.stop(); } });
- Android学习(一)--第一个项目遇到的一些问题跟解决
- 工作第一个项目遇到的问题及解决
- Android学习(二)--第二个项目遇到的问题
- 第一个项目遇到的问题2
- Android studio 遇到的第一个问题
- ASP.NET第一个项目,希望我遇到的一些问题对各位会有所帮助
- 最近一阵子写C#的项目,遇到的一些问题以及解决的办法,跟大家分享一下```
- Android微信授权登录跟遇到的一些问题
- JavaWeb项目遇到的一些小问题(一)
- 学习.NET遇到的第一个问题。原来解决这么简单
- 2014-10-22遇到的问题----Android创建第一个项目出现appcompat_v7工程的解决办法
- opencv第一个测试程序遇到的问题及解决
- 视频项目一些问题跟解决
- 我的第一个Android项目开发(一)
- 第一个项目进行时 -- 分享遇到的问题
- 南京第一个项目遇到的问题(easyui)
- 第一个java Web项目中遇到的问题(上)
- 第一个项目role模块遇到的问题
- ajax 传入值
- Binder机制分析【一】-简介
- 《Linux操作系统》——教学进度表20140218——张同光
- 《Linux操作系统》——实验课教学进度表20140218——12计科1班——张同光
- 练习1-i
- Android学习(一)--第一个项目遇到的一些问题跟解决
- Nlog简单使用
- SMEM介绍
- 《Linux操作系统》——实验课教学进度表20140218——12计科2班——张同光
- Android 电话号码及邮箱格式化
- Java开发语句和代码块模板
- 《嵌入式开发》——教学进度表20140218——张同光
- Fragment实现懒加载,让应用更优化
- 时钟设置的关键性寄存器