首页 文章 精选 留言 我的

精选列表

搜索[Android],共10000篇文章
优秀的个人博客,低调大师

Android -- 屏幕亮度

获取屏幕亮度 int getScreenBrightness(Activity activity) { int value = 0; ContentResolver cr = activity.getContentResolver(); try { value = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS); } catch (SettingNotFoundException e) { } return value; } 设置屏幕亮度 void setScreenBrightness(Activity activity, float value) { WindowManager.LayoutParams params = activity.getWindow().getAttributes(); params.screenBrightness = value; activity.getWindow().setAttributes(params); } screenBrightness 的取值范围在[0,1]之间。 我是天王盖地虎的分割线 本文转自我爱物联网博客园博客,原文链接http://www.cnblogs.com/yydcdut/p/4240486.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android OpenGL 使用

基本框架 编写一个类来继承GLSurfaceView.Renderer,并实现其中的三个方法onSurfaceCreated、onSurfaceChanged、onDrawFrame。 /** * 基本框架 * Created by mazaiting on 2017/8/9. */ public class GLRenderer implements GLSurfaceView.Renderer { /** * 在窗口被创建时被调用,需要做一些必要的初始化工作: */ @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 启动阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景,设置清楚屏幕时所用的颜色取值:RGBA.0f-1.0f gl.glClearColor(0, 0, 0, 1.0f); // 设置深度缓存--决定哪个物体先画 gl.glClearDepthf(1.0f); // 启动深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } /** * 当窗口大小发生改变时被调用,不管窗口的大小是否已经改变,在程序开始时至少运行一次。 */ @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; // 设置OpenGL场景的大小 gl.glViewport(0, 0, width, height); // 设置投影矩阵--增加透视 gl.glMatrixMode(GL10.GL_PROJECTION); // 重置投影矩阵--恢复原始状态 gl.glLoadIdentity(); // 设置视图的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 选择模型观察矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型观察矩阵 gl.glLoadIdentity(); } /** * 在窗口内进行绘图操作。 在绘图之前,需要将屏幕清楚成前面指定的颜色,清楚深度缓存并且重置场景 */ @Override public void onDrawFrame(GL10 gl) { // 清楚屏幕和深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); // 具体绘图开始... } /** * OpenGL 是一个非常底层的画图接口,它所使用的缓冲区存储结构是和我们的 java 程序中不相同的。 * Java 是大端字节序(BigEdian),而 OpenGL 所需要的数据是小端字节序(LittleEdian)。 * 所以,我们在将 Java 的缓冲区转化为 OpenGL 可用的缓冲区时需要作一些工作。建立buff的方法如下 **/ public Buffer bufferUtil(int []arr){ // 先初始化buffer,数组的长度*4,因为一个int占4个字节 ByteBuffer qbb = ByteBuffer.allocateDirect(arr.length * 4); // 数组排列用nativeOrder qbb.order(ByteOrder.nativeOrder()); // 将ByteBuffer转换为IntBuffer IntBuffer mBuffer = qbb.asIntBuffer(); // 将数组设置进去 mBuffer.put(arr); //mBuffer.position(0); // 重置 mBuffer.flip(); return mBuffer; } } 其中都是一些具体的配置,在主Activity中,我们首先创建出一个GLRenderer对象 ,并创建GLSurfaceView对象,将GLRenderer对象设置在GLSurfaceView对象中。、 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 基础框架 GLSurfaceView.Renderer renderer = new GLRenderer(); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(renderer); // 设置布局 setContentView(glView); } } 至此,我们将OpenGL开发时所要做的配置已完成,接下来我们在写新的Renderer时,只需要继承在GLRenderer,重写onDrawFrame(GL10 gl)方法即可。 绘制多边形 实现此类后,要想看到效果,务必将主AcitivityGLSurfaceView.Renderer renderer = new GLRenderer();的此行代码更改为GLSurfaceView.Renderer renderer = new PolygonRenderer(); /** * 绘制多边形 * Created by mazaiting on 2017/8/9. */ public class PolygonRenderer extends GLRenderer{ int one = 0x00010000; //三角形三个顶点 private int[] triggerBuffer = new int[] { 0, one, 0,//上顶点 - one, -one, 0, //左下点 one, -one, 0,}; //右下点 //正方形的4个顶点 private int[] quaterBuffer = new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}; @Override public void onDrawFrame(GL10 gl) { super.onDrawFrame(gl); // 此函数,就是将画笔沿X轴左移1.5f个单位,Y轴保持不变,Z轴向屏幕里面移动6.0f个单位。 //gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f);// z 轴值小于-1.0f // 允许设置顶点 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 设置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, bufferUtil(triggerBuffer)); // 绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置当前模型观察矩阵 gl.glLoadIdentity(); // 右移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f);// z 轴值小于-1.0f // 设置四边形 gl.glVertexPointer(3,GL10.GL_FIXED,0,bufferUtil(quaterBuffer)); // 绘制四边形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4); //取消顶点设置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); } } 效果图: 绘制多边形.png 绘制颜色 实现此类后,要想看到效果,务必将主AcitivityGLSurfaceView.Renderer renderer = new GLRenderer();的此行代码更改为GLSurfaceView.Renderer renderer = new ColorRenderer(); /** * 绘制颜色 * Created by mazaiting on 2017/8/9. */ public class ColorRenderer extends GLRenderer { int one = 0x10000; //三角形三个顶点 (r,g,b,a) private int[] triggerBuffer = new int[] { 0, one, 0,//上顶点 - one, -one, 0, //左下点 one, -one, 0,}; //右下点 //正方形的4个顶点 private int[] quaterBuffer = new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}; //三角形的顶点颜色值(r,g,b,a) private int[] colorBuffer = new int[]{ one,0,0,one, 0,one,0,one, 0,0,one,one, }; @Override public void onDrawFrame(GL10 gl) { super.onDrawFrame(gl); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(-1.5f,0.0f,-6.0f); //设置定点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //设置颜色数组 -- 开启颜色渲染功能. gl.glEnableClientState(GL10.GL_COLOR_ARRAY); // 设置三角形顶点的颜色 gl.glColorPointer(4,GL10.GL_FIXED,0,bufferUtil(colorBuffer)); // 设置三角形顶点 gl.glVertexPointer(3,GL10.GL_FIXED,0,bufferUtil(triggerBuffer)); gl.glDrawArrays(GL10.GL_TRIANGLES,0,3); //关闭颜色数组 -- 关闭颜色渲染功能. gl.glDisableClientState(GL10.GL_COLOR_ARRAY); gl.glLoadIdentity(); // 右移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(1.5f,0.0f,-6.0f); // 设置当前色为蓝色 gl.glColor4f(0.0f,0.5f,1.0f,1.0f); //设置和绘制正方形 gl.glVertexPointer(3,GL10.GL_FIXED,0,bufferUtil(quaterBuffer)); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4); //取消顶点数组 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } } 效果图: 绘制颜色.png 绘制旋转 实现此类后,要想看到效果,务必将主AcitivityGLSurfaceView.Renderer renderer = new GLRenderer();的此行代码更改为GLSurfaceView.Renderer renderer = new RotateRenderer(); /** * 绘制旋转图形 * Created by mazaiting on 2017/8/9. */ public class RotateRenderer extends GLRenderer { int one = 0x00010000; //三角形三个顶点 private int[] triggerBuffer = new int[] { 0, one, 0,//上顶点 - one, -one, 0, //左下点 one, -one, 0,}; //右下点 @Override public void onDrawFrame(GL10 gl) { super.onDrawFrame(gl); gl.glTranslatef(-1.5f,0.0f,-6.0f); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glRotatef(180f,0,0,0);//旋转180 gl.glVertexPointer(3,GL10.GL_FIXED,0,bufferUtil(triggerBuffer)); gl.glDrawArrays(GL10.GL_TRIANGLES,0,3); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); gl.glLoadIdentity(); } } 效果图: 绘制旋转.png 绘制三棱锥 实现此类后,要想看到效果,务必将主AcitivityGLSurfaceView.Renderer renderer = new GLRenderer();的此行代码更改为GLSurfaceView.Renderer renderer = new PyramidRenderer(); /** * 四棱锥 * Created by mazaiting on 2017/8/9. */ public class PyramidRenderer extends GLRenderer { int one = 0x10000; // 四棱锥顶点数组: private int[] triggerBuffer = new int[] { 0, one, 0, -one, -one, one, one, -one, one, 0,one, 0, one,-one, one, one, -one, -one, 0, one, 0, one, -one, -one, -one, -one, -one, 0, one, 0, -one, -one, -one, -one, -one, one }; /** * Every vertex has got its own color, described by 4 values * R(ed) * G(green) * B(blue) * A(lpha) */ int colors[] = { 0, 0, 0, one, one, 0, 0, one, one, one, 0, one, 0, one, 0, one, 0, 0, one, one, one, 0, one, one, one, one, one, one, 0, one, one, one, }; /** * The last thing is that we need to describe some Triangles. * A triangle got 3 vertices. * The confusing thing is, that it is important in which order * the vertices of each triangle are described. * So describing a triangle through the vertices: "0, 4, 5" * will not result in the same triangle as: "0, 5, 4" * You probably ask: Why the hell isn't that the same ??? * The reason for that is the call of: "gl.glFrontFace(gl.GL_CW);" * which means, that we have to describe the "visible" side of the * triangles by naming its vertices in a ClockWise order! * From the other side, the triangle will be 100% lookthru! * You can create a kind of magic mirror with that **/ byte indices[] = { 0, 4, 5, 0, 5, 1, 1, 5, 6, 1, 6, 2, 2, 6, 7, 2, 7, 3, 3, 7, 4, 3, 4, 0, 4, 7, 6, 4, 6, 5, 3, 0, 1, 3, 1, 2 }; @Override public void onSurfaceChanged(GL10 gl, int width, int height) { super.onSurfaceChanged(gl, width, height); // 设置透视范围 GLU.gluPerspective(gl, 45.0f, ((float) width) / height, 0.1f, 10f); } float xRot = 0.0f; float yRot = 0.0f; @Override public void onDrawFrame(GL10 gl) { super.onDrawFrame(gl); gl.glMatrixMode(GL10.GL_MODELVIEW);// 切换至模型观察矩阵 gl.glLoadIdentity();// 重置当前的模型观察矩阵 GLU.gluLookAt(gl, 0f, 0f, 3f, 0f, 0f, 0f, 0f, 1f, 0f);//设置视点和模型中心位置 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FIXED, 0, bufferUtil(triggerBuffer)); gl.glRotatef(xRot,1f,0f,0f);// 绕着(0,0,0)与(1,0,0)即x轴旋转 gl.glRotatef(yRot,0f,1f,0f); gl.glColor4f(1.0f,0.0f,0.0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 3); gl.glColor4f(0.0f,1.0f,0.0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 3, 3); gl.glColor4f(0.0f,0.0f,1.0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 6, 3); gl.glColor4f(1.0f,0.0f,1.0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 9, 3); xRot += 1.0f; yRot += 0.5f; } } 效果图: 三棱锥.png 绘制正方体 实现此类后,要想看到效果,务必将主AcitivityGLSurfaceView.Renderer renderer = new GLRenderer();的此行代码更改为GLSurfaceView.Renderer renderer = new CubeRenderer(); /** * 绘制正方体 * Created by mazaiting on 2017/8/10. */ public class CubeRenderer extends GLRenderer{ float box[] = new float[] { // FRONT -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, // BACK -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, // LEFT -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, // RIGHT 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, // TOP -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, // BOTTOM -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, }; FloatBuffer cubeBuff; float xRot = 0.0f; float yRot = 0.0f; public CubeRenderer(){ cubeBuff = makeFloatBuffer(box);//转换为float数组 } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { super.onSurfaceChanged(gl, width, height); // 设置透视范围 GLU.gluPerspective(gl,45.0f,((float)width)/height,0.1f,10f); } @Override public void onDrawFrame(GL10 gl) { super.onDrawFrame(gl); gl.glMatrixMode(GL10.GL_MODELVIEW);// 切换至模型观察矩阵 gl.glLoadIdentity();// 重置当前的模型观察矩阵 GLU.gluLookAt(gl,0f,0f,3f,0f,0f,0f,0f,1f,0f);//设置视点和模型中心位置 gl.glVertexPointer(3,GL10.GL_FLOAT, 0,cubeBuff);//设置顶点数据 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glRotatef(xRot,1f,0f,0f);// 绕着(0,0,0)与(1,0,0)即x轴旋转 gl.glRotatef(yRot,0f,1f,0f); gl.glColor4f(1.0f,0f,0f,1.0f);//设置颜色,红色 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,4);//绘制正方形FRONT面 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,4,4); gl.glColor4f(0f,1.0f,0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,8,4); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,12,4); gl.glColor4f(0f,0f,1.0f,1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,16,4); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,20,4); xRot += 1.0f; yRot += 0.5f; } /** * 将float数组转换为存储在字节缓冲数组 * @param arr * @return */ public FloatBuffer makeFloatBuffer(float[] arr){ // 分配缓冲空间,一个float占4个字节 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(arr.length*4); // 设置字节顺序,其中ByteOrder.nativeOrder()是获取本机字节顺序 byteBuffer.order(ByteOrder.nativeOrder()); // 转换为float型 FloatBuffer floatBuffer = byteBuffer.asFloatBuffer(); // 添加数据 floatBuffer.put(arr); // 设置数组的起始位置 floatBuffer.position(0); return floatBuffer; } } 效果图: 立方体.png

优秀的个人博客,低调大师

Android -- 保存文件

背景 我们以常见的登录的时候有CheckBox来显示是否保存帐号密码的形式来生动的讲解这个故事。 最后是以txt文档保存,用到的是Java的IO操作。 这个只是粗略的,大家不喜勿喷。 保存文件 public static void savefile2card(Context context,String username,String password) { File file = null; FileOutputStream fos = null; try { // file = new File("/data/data/com.yuyidong.savefile/savefile.txt"); file = new File(context.getFilesDir(),"info.txt"); fos = new FileOutputStream(file); fos.write((username+"!!!!"+password).getBytes()); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); try { fos.close(); } catch (IOException e1) { // TODO 自动生成的 catch 块 e1.printStackTrace(); } } } 读取文件 public static Map<String,String> getSaveFile(Context context) { File file =new File(context.getFilesDir(),"info.txt"); try { FileInputStream fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String str = br.readLine(); String[] infos = str.split("!!!!"); Map<String,String> map = new HashMap<String, String>(); map.put("username",infos[0]); map.put("password", infos[1]); br.close(); return map; } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); return null; } finally { } } 主程序 public class MainActivity extends Activity { private Button button; private CheckBox check; private EditText usernameText; private EditText passwordText; private String username; private String password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button) findViewById(R.id.button); check = (CheckBox) findViewById(R.id.check); usernameText = (EditText) findViewById(R.id.username); passwordText = (EditText) findViewById(R.id.password); button.setOnClickListener(new buttonListener()); Map<String, String> map = read.getSaveFile(this); usernameText.setText(map.get("username")); passwordText.setText(map.get("password")); } class buttonListener implements OnClickListener { @Override public void onClick(View v) { // TODO 自动生成的方法存根 username = usernameText.getText().toString(); password = passwordText.getText().toString(); System.out.println(username+"~!!~"+password); if(check.isChecked()) { save.savefile2card(MainActivity.this, username, password); } } } 我是天王盖地虎的分割线 源代码:http://pan.baidu.com/s/1dD1Qx01 saveFile.zip 本文转自我爱物联网博客园博客,原文链接:http://www.cnblogs.com/yydcdut/p/3708964.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android RxAndroid使用

实现类似定时器功能 依赖 compile 'io.reactivex.rxjava2:rxandroid:2.0.1' compile 'io.reactivex.rxjava2:rxjava:2.1.3' 2.布局文件中只是简单的TextView控件来显示文本。目前涉及到及所了解的RxAndroid与RxJava中多用到的是 .observeOn(AndroidSchedulers.mainThread()),通知主线程这一块,其它不同还未涉及到。RxAndroid在使用时使用RxJava(Java RxJava学习使用)中的方法, @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final TextView textView = (TextView) findViewById(R.id.textView); Observable .just("one", "two", "three", "four", "five")// 数据源 .map(new Function<String, String>() { @Override public String apply(@NonNull String s) throws Exception { Log.e("TAG",Thread.currentThread().getName()); // 打印io线程名 Thread.sleep(1000); // 线程睡眠1秒钟 return s; } }) .subscribeOn(Schedulers.io()) // 将以上代码订阅在io线程 .observeOn(AndroidSchedulers.mainThread()) // 通知主线程 .subscribe(new Consumer<String>() { // 主线程订阅 @Override public void accept(String s) throws Exception { Log.e("TAG",Thread.currentThread().getName()); // 打印当前线程名 textView.setText(s); } }); }

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册