您的位置:首页 > 移动开发 > Android开发

Android ndk开发环境下利用c编写的简单平面波传播模型(带控件)

2011-05-19 19:00 477 查看
有急需做ndk开发的朋友可以看一下,自己编写的,代码有点乱没注释,但是效果还可以

有需要的可以下载源码

该程序主要利用c语言利用ndk opengl实现平面波的绘制(当然我的代码中各个参数都是相对参数)

然后再opengl场景中加入控件,有两个滑条,控制波速和波长

简单介绍下实现过程

1.控件的布局实现

我采用相对布局,opengl场景为一个布局中的view,加入代码如下:

<android.opengl.GLSurfaceView android:layout_height="320dip"

android:layout_weight="1"

android:id="@+id/glview"

android:layout_width="320dip"

android:layout_below="@id/tracking"></android.opengl.GLSurfaceView>

我设置的是正方行显示区域,这样在c语言端场景的设置就可以把它设置成方形

其他控件不再啰嗦。自己看源码。

2.滑条的时间相应

主类代码中设置滑条的对象,然后加入事件监听器,利用seekBar.getProgress()获取滑条的当前参数值

并赋给要控制改变的变量。

(本来想把这些参数传递到c端,并调用。但试了很久,无法实现)

于是在java端设置要改变的变量,通过seekbar监听器与滑条变量进行绑定。然后把这些变量添加到本地函数里边

这样,就实现了java端滑条上的变量对c语言端函数参数的改变,主要代码如下:

static float bosu;

static float bochang;

mSeekBar1 = (SeekBar) findViewById(R.id.seek1);

mSeekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)

{

bosu=seekBar.getProgress();

mProgressText1.setText("波速当前值:"+progress);

}

public void onStartTrackingTouch(SeekBar seekBar)

{

}

//停止拖动

public void onStopTrackingTouch(SeekBar seekBar)

{

}

});

mSeekBar2=(SeekBar) findViewById(R.id.seek2);

mSeekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch)

{

bochang=0.03f*seekBar.getProgress();

mProgressText2.setText("波长当前值:"+progress);

}

public void onStartTrackingTouch(SeekBar seekBar)

{

}

//停止拖动

public void onStopTrackingTouch(SeekBar seekBar)

{

}

});

以下是本地函数:

native private void onNdkDrawFrame (float lada,float omiga);

public void onDrawFrame(GL10 gl) {

onNdkDrawFrame (bochang,bosu);

}

3.c语言端本地函数对平面波的绘制

具体代码可参见源码

效果图如下



源码链接如下:

http://download.csdn.net/source/3294485
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐