有急需做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