当前位置:  编程技术>移动开发
本页文章导读:
    ▪透过编码方式实现软件的布局        通过编码方式实现软件的布局程序运行结果图示: 需要注意的是: 1)一个控件只能有一个父元素,如果多次添加 09-02 11:01:34.785: E/AndroidRuntime(23954):  java.lang.RuntimeException: Unable to start activit.........
    ▪ 视频刻录的简略实现        视频刻录的简单实现本代码可能在不用的平台上会存在一些问题。。 但是主要方法还是一样的 1、main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/.........
    ▪ makefile编纂差异       makefile编写差异由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习。之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的.........

[1]透过编码方式实现软件的布局
    来源: 互联网  发布时间: 2014-02-18
通过编码方式实现软件的布局

程序运行结果图示:



需要注意的是:

1)一个控件只能有一个父元素,如果多次添加
09-02 11:01:34.785: E/AndroidRuntime(23954):
 java.lang.RuntimeException: Unable to start activity ComponentInfo{cn.itcast.codeui/cn.itcast.codeui.MainActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

1、把新建项目时的main.xml文件删除


2、MainActivity

package com.njupt.codeui;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT); 
		LayoutParams params1 = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
		LayoutParams params2 = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
		
		LinearLayout linearLayout = new LinearLayout(this);
		linearLayout.setOrientation(LinearLayout.VERTICAL);
		
		TextView tv = new TextView(this);
		tv.setText("请输入你的老婆的姓名");
		linearLayout.addView(tv,params1);
		
		EditText et = new EditText(this);
		et.setText("章泽天");
		linearLayout.addView(et,params1);
		
		Button bt = new Button(this);
		bt.setText("确定");
		linearLayout.addView(bt,params2);
		
		setContentView(linearLayout,params);
		
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}



    
[2] 视频刻录的简略实现
    来源: 互联网  发布时间: 2014-02-18
视频刻录的简单实现

本代码可能在不用的平台上会存在一些问题。。

但是主要方法还是一样的


1、main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     >

    <SurfaceView android:id="@+id/surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         />
    
    <LinearLayout android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        >
        
        <Button android:id="@+id/bt_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="开始"
        android:onClick="start"
        android:layout_marginRight="10dp"/>
        <Button android:id="@+id/bt_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止"
        android:onClick="stop"
        android:enabled="false"
        android:layout_marginRight="10dp"/>
    </LinearLayout>

</RelativeLayout>


2、MainActivity

package com.njupt.vediorecorder;

import java.io.File;

import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

	private SurfaceView surfaceview;
	private MediaRecorder mr;
    private Button bt_start;
    private Button bt_stop;
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		surfaceview = (SurfaceView) findViewById(R.id.surfaceview);
		bt_start = (Button) findViewById(R.id.bt_start);
		bt_stop = (Button) findViewById(R.id.bt_stop);
		
		SurfaceHolder holder = surfaceview.getHolder();
		holder.setFixedSize(176, 144);
		holder.setKeepScreenOn(true);
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

	}

	public void start(View v) {

		try {
			mr = new MediaRecorder();
			mr.reset();
			mr.setAudioSource(MediaRecorder.AudioSource.MIC);
			mr.setVideoSource(MediaRecorder.VideoSource.CAMERA);
			mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
			mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
			mr.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

			File file = new File(Environment.getExternalStorageDirectory(),
					System.currentTimeMillis() + ".3gp");
			mr.setOutputFile(file.getAbsolutePath());

			mr.setPreviewDisplay(surfaceview.getHolder().getSurface());
			mr.prepare();
			
			bt_start.setEnabled(false);
			bt_stop.setEnabled(true);
			mr.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void stop(View v){
		mr.stop();
		
		bt_start.setEnabled(true);
		bt_stop.setEnabled(false);
		mr.release();
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


3、AndroidManifest.xml

注册权限

 <uses-permission android:name="android.permission.RECORD_AUDIO"/>//媒体刻录
    <uses-permission android:name="android.permission.CAMERA"/>//拍照
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>//以下两个是读写SD卡
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    


横屏显示

 android:screenOrientation="landscape"



    
[3] makefile编纂差异
    来源: 互联网  发布时间: 2014-02-18
makefile编写差异

由于zlib动态库在linux下引用的问题引出了对于简练的makefile的学习。之前通过看网络上的一些文章自己也算简单了解如何编写一个makefile,可总是不那么美观,今天经过辉哥的指点,对于makefile做了调整,看下两者之间的差别吧。如果有更好的方法,欢迎指点。

 

第一次文件如下:

CPP=filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp
OBJ =  md5.o compressfactory.o filehead.o xmailuncompress.o zlibstrage.o

.PHONY:ALL
ALL: libcompress.a libcompress.so  onlyUncompress mytest

HEAD =  -I./include/

mytest: main.cpp
    g++ main.cpp -g -L. -lcompress   -L./so/ -llogger ${HEAD} -I. -o $@
    rm -f *.o   
    
onlyUncompress:unCompress.cpp
    g++ unCompress.cpp -g -L. -lcompress  -L./so/ -llogger ${HEAD} -I. -o $@

libcompress.a:$(OBJ)
    ar -rc libcompress.a $(OBJ) 
    
libcompress.so:$(CPP)
    g++ -g -fPIC -shared -Wl,-rpath ./so/ -L./so -lz -llogger ${CPP} -o $@  ${HEAD}
    cp libcompress.so ./so/

compressfactory.o:compressfactory.cpp
    g++ -c compressfactory.cpp ${HEAD}

filehead.o:filehead.cpp
    g++  -c filehead.cpp ${HEAD}

xmailuncompress.o:xmailuncompress.cpp
    g++  -c xmailuncompress.cpp ${HEAD}

zlibstrage.o:zlibstrage.cpp
    g++  -c zlibstrage.cpp -L./so -lz ${HEAD}
md5.o:md5.cpp
    g++  -c md5.cpp ${HEAD}

install:
    cp libcompress.so ../libcomp/so/
    cp ./so/*.so ../libcomp/so/
    cp *.h       ../libcomp/include/
    cp ./include/* ../libcomp/include/
    
    cp *.h       ../dfs_api/include/compress/
    cp libcompress.so ../dfs_api/lib/

clean:
    rm -f *.o
    rm -f libcompress.a
    rm -f mytest
    rm -f onlyUncompress
    rm -f libcompress.so

 

经过修改后的makefile如下:

 

CPP=main.cpp filehead.cpp xmailuncompress.cpp zlibstrage.cpp compressfactory.cpp md5.cpp

FLAG= -c -g -fPIC -shared

OBJ=filehead.o xmailuncompress.o zlibstrage.o compressfactory.o md5.o

.PHONY:ALL
all:libcompress.a libcompress.so  onlyUncompress mytest

HEAD= -I./include/ -I.

LIB= -L./ -llogger -lz

mytest: main.o
    g++ $< -g -L. -lcompress  ${LIB}  ${HEAD} -I. -o $@
    rm -f *.o   
    
onlyUncompress:unCompress.cpp
    g++ unCompress.cpp -g -L. -lcompress  ${LIB} ${HEAD} -I. -o $@

libcompress.a:$(OBJ)
    ar -rc libcompress.a $(OBJ) 
    
libcompress.so:$(OBJ)
    g++ -g -fPIC -shared -Wl,-rpath ${LIB} $(OBJ) -o $@  ${HEAD}

.cpp.o:
    g++ $(HEAD) $(FLAG) -o $@ $< 

install:
    cp libcompress.so ../libcomp/so/
    cp *.so ../libcomp/so/
    cp *.h       ../libcomp/include/
    cp ./include/* ../libcomp/include/
    
    cp *.h       ../dfs_api/include/compress/
    cp libcompress.so ../dfs_api/lib/

clean:
    rm -f *.o
    rm -f libcompress.a
    rm -f mytest
    rm -f onlyUncompress
    rm -f libcompress.so

 

两者对比来看是不是后者清晰简练不少

顺带的了解了两个小的知识点:

在makefile中$>代表引用“:”后的内容,,,$@引用“:”前的内容


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3