导航:首页 > 操作系统 > 安卓程序编写怎么做图片在界面上

安卓程序编写怎么做图片在界面上

发布时间:2023-01-31 05:20:27

❶ 怎样在安卓手机桌面添加一张照片啊

  1. 在待机界面按屏幕右下角的“+”。

  2. 按住桌面屏幕空白处,弹出个方框,选快捷方式,然后选应用程序,然后选你要的图片。

❷ 为android程序设置统一的背景图

这么久了,还是给个明确答案吧
styles.xml:
<style name="AppTheme" parent="AppBaseTheme">

<!-- All customizations that are NOT specific to a particular API-level can go here. -->

<item name="android:windowAnimationStyle">@style/animationActivity</item>

<item name="android:windowBackground">@drawable/dt_bg</item>你自己的图片设置在这里

</style>

AndroidManifest.xml中Application设置theme
<application

android:theme="@style/AppTheme" >
运行项目便出现你想要的背景

❸ Android编程中怎么在屏幕上显示图片

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shu" />
说明几点:
1、项目中资源文件名称不要用中文,把“树”改成"shu"
2、启动一个模拟器或者先连接自己的手机,在DDMS查看,如果有设备说明连接成功了,这时就可以运行这个程序了。

❹ Andriod编程中代码编写的Activity中的Layout添加图片

首先在你的helloworld程序对应的layout配置文件(res/layout/下的XXX.xml文件)中添加一个按钮,具体代码如下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""
android:id="@+id/layout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<!-- 下面这段就是添加的button -->
<Button android:id="@+id/button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="change background" />

</LinearLayout>

然后在你的继承Activity类的java类中添加按钮的事件监听以及事件处理,代码如下:
public class 你的helloworld类名 extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.你的layout文件名);

//下面的代码用于为按钮注册一个监听
findViewById(R.id.frame_layout).setOnClickListener(new OnClickListener() {
//下面的代码用于处理按钮点击后的事件
public void onClick(View v) {
//下面的代码用于使背景变色
findViewById(R.id.layout).setBackgroundColor(Color.BLUE);
}
});

}

}

❺ android 能在屏幕上绘一张小图片,然后透明背景,还能操作能看到的背景桌面图标或程序。

package com.qdsx.cml;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
//import android.view.animation.AnimationUtils;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
public class TestdonghuaActivity extends Activity {
private ImageView tweenMM;
// private Animation animation;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tweenMM =(ImageView)findViewById(R.id.imageView1);
}

//渐变
public void BtnAlphaOnClick(View view){
//this.doStartAnimation(R.anim.alpha_animation);
Animation b = new AlphaAnimation(0.1f, 1.0f);
b.setDuration(2000);
tweenMM.startAnimation(b);
}
//旋转
public void BtnrotateOnClick(View view){
//this.doStartAnimation(R.anim.rotate_animation);
Animation c = new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
c.setDuration(3000);
tweenMM.startAnimation(c);
}
//缩放
public void BtnScaleOnClick(View view){
//this.doStartAnimation(R.anim.scale_animation);
Animation d = new ScaleAnimation(0f, 1f, 0f, 1f, Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIVE_TO_SELF,0.5f);
d.setDuration(3000);
tweenMM.startAnimation(d);
}
//位移
public void BtnTransalteOnclick(View view){
//this.doStartAnimation(R.anim.translate_animation);
Animation a= new TranslateAnimation(0, 100, 0, 100);
a.setDuration(5000);
a.setFillAfter(true);//使图片移动后固定
tweenMM.startAnimation(a);
}

//开始动画方法
/* private void doStartAnimation(int animid){
animation = AnimationUtils.loadAnimation(this, animid);
animation.setFillAfter(true);//使图片移动后固定
tweenMM.startAnimation(animation);
}*/
}

❻ 安卓应用程序 创建一个滚动界面 像滚动的广告一样 里面加上我自己想要的图片 达到变幻的效果! 要几个模块

单独换个界面程序,卸载容易,装就难啦,不用说小白,大神都没法,实在要换,可以刷机,如果你学过C++,提取一下就行了.
要刷机可以用甜椒刷,有教程.

❼ android编程,用Imageview为界面添加了一张jpg图片为界面,请问如何在图片上添加一个button按钮

imageView上好像是不好添加组件吧。。。
你一定需要一个imageView吗?
如果不一定,其实可以不添加ImageView,直接在你的布局里设置背景图片为本来ImageView中要添加的图片,然后再在该布局上添加Button

❽ 怎么用代码修改一个android应用程序在桌面的图标

用mt管理器提取应用安装包,打开安装包的res-drawable,里面你会发现icon.png,appicon.png或者ic.launche.png,这些就是应用的图标,你可以下载你想要的图片,把图片重命名成对应的名字,复制过去并替换,就完成第一步了,下面还有其他drawable.xxx的文件,里面的都是应用原来的图标,按照上面的方法再做一遍,最后储存并更新,安装应用就搞定了,但可能会造成应用闪退的情况。

❾ 安卓开发:主窗体要放张jpg图片,如何静态放上而不需程序代码,要详细步骤哟

可以,要用资源的办法。

  1. JPG图像要放到eclipse工程的资源中,最后先改成英文名,如zp.jpg再点复制;

  2. 在Eclipse的资源Res中点低分辨文件夹drawable-ldpi,再点“paste"就粘贴过来了,

    出现+,点开就见资源文件;

  3. 在主窗体的Graphical Layout可视化界面里,拖一控件ImageView,

    在Src属性里敲@drawable即弹出你的资源名,@drawable/zp

    图片即出现

❿ “Android渲染”图像是怎样显示到屏幕上的

我们每天花很多时间盯着手机屏幕,不知道你有没有好奇过:

这时候来了一位Android程序员(当然也可以是iOS或者是前端程序员)说: 这里显示的其实是一个View树,我们看到的都是大大小小的View。

。。。听起来很有道理,我们也经常指着屏幕说这个View怎么怎么样,可问题又来了:

程序员老兄又来了: 屏幕当然不能识别View,它作为一个硬件,只能根据收到的数据改变每个像素单元的数据,这样整体来看,用户就发现屏幕上的内容变化了。至于View的内容是如何一步一步转化成屏幕可是识别的数据的,简单讲可以分成三步:

。。。听起来很有道理,可问题又来了:

那可就说来话长了。。。

对于 measure layout 和 draw ,Android工程师(大都)非常熟悉,我们常常在执行了 onDraw() 方法后,一个让人自豪的自定义View就显示出来了。在实际的Android绘制流程中,第一步就是通过 measure layout 和 draw 这些步骤准备了下面的材料:

在Android的绘制中,我们使用Canvas API进行来告诉表示画的内容,如 drawCircle() drawColor() drawText() drawBitmap() 等,也是这些内容最终呈现在屏幕上。

在当前应用中,View树中所有元素的材料最终会封装到 DisplayList 对象中(后期版本有用 RenderNode 对 DisplayList 又做了一层封装,实现了更好的性能),然后发送出去,这样第一阶段就完成了。

当然就有一个重要的问题:

会将Bitmap复制到下一个阶段(准确地讲就是复制到GPU的内存中)。
现在大多数设备使用了GPU硬件加速,而GPU在渲染来自Bitmap的数据时只能读取GPU内存中的数据, 所以需要赋值Bitmap到GPU内存,这个阶段对应的名称叫 Sync&upload 。另外,硬件加速并不支持所有Canvas API,如果自定义View使用了不支持硬件加速的Canvas API(参考 Android硬件加速文档 ),为了避免出错就需要对View进行软件绘制,其处理方式就是生成一个Bitmap,然后复制到GPU进行处理。

这时可能会有问题:如果Bitmap很多或者单个Bitmap尺寸很大,这个过程可能会时间比较久,那有什么办法吗?

当然有(做作。。。)

关于Bitmap这里再多说一句:
Bitmap的内存管理一直是Android程序员很关心的问题,毕竟它是个很占内存的大胖子,在Android3.0~Android7.0,Bitmap内存放在Java堆中,而android系统中每个进程的Java堆是有严格限制的,处理不好这些Bitmap内存,容易导致频繁GC,甚至触发Java堆的 OutOfMemoryError 。从Android8.0开始,bitmap的像素数据放入了native内存,于是Java Heap的内存问题暂时缓解了。

Tip:

现在材料已经备好,我们要真正地画东西了。

接下来就要把东西画出来了,画出来的过程就是把前面的材料转化成一个堆像素数据的过程,也叫 栅格化 ,那这个活儿谁来干呢?

候选人只有两个:

大部分情况下,都是GPU来干这个活儿,因为GPU真的特别快!!!

所谓的“画”,对于计算机来讲就是处理图像,其实就是根据需要(就是DisplayList中的命令)对数据做一些特定类型的数学运算,最后输出结果的过程。我们看到的每一帧精美界面,(几乎)都是GPU吭哧吭哧"算"出来的,这个就有疑问了:

我们简单地聊聊CPU与GPU的区别:
CPU的核心数通常是几个,单个核心的主频高,功能强大,擅长串行处理复杂的流程;
GPU ( Graphics Processing Unit ) 有成百上千个核心,单个核心主频低,功能有限,擅长(利用超多核心)大量并行简单运算;正如它的名字一样,GPU就是为图像绘制这个场景量身定做的硬件(所以使用GPU也叫硬件加速),后来也被用到挖矿和神经网络中。

图片肯定没有视频直观,我们从感性的角度感受一下GPU到底有多快,我想下面的视频看过就不会忘掉,你会被GPU折服:
Mythbusters Demo GPU versus CPU

看这个视频,我们对于“加速”应该有了更深刻的印象,这里不再进一步分析CPU和GPU更微观的差别(因为不懂),我想已经讲明白为什们GPU更快了。

另外,在GPU开始绘制之前,系统也做了一些优化(对DisplayList中的命令进行预处理),让整个绘制流程更加高效:

第二步的具体过程还是很复杂的,比如涉及到Alpha绘制,相关的优化会失效,详情查看文章 为什么alpha渲染性能低 .

至于画在哪里,我们现在理解为一个缓冲(Buffer)中就可以了,具体的机制放在第三步讲。

到此,我们已经画(绘制)完了图像内容,把这个内容发送出去,第二步的任务就完成了。

Tip:

我们知道,除了我们的应用界面,手机屏幕上同时显示着其他内容,比如SystemUI(状态栏、导航栏)或者另外的悬浮窗等,这些内容都需要显示到屏幕上。所以要先 把这些界面的内容合成,然后再显示到屏幕

在讲合成图像之前,我们有必要知道这些界面图像(Buffer)是怎么传递的:

Android图形架构中,使用生产者消费者模型来处理图像数据,其中的图像缓冲队列叫 BufferQueue , 队列中的元素叫 Graphic Buffer ,队列有生产者也有消费者;每个应用通常会对应一个 Surface ,一个 Surface 对应着一个缓冲队列,每个队列中 Graphic Buffer 的数量不超过3个, 上面两步后绘制的图像数据最终会放入一个 Graphic Buffer ,应用自身就是队列的生产者( BufferQueue 在Android图形处理中有广泛的应用,当前只讨论界面绘制的场景)。

每个 Graphic Buffer 本身体积很大,在从生产者到消费者的传递过程中不会进行复制的操作,都是用匿名共享内存的方式,通过句柄来跨进程传递。

我们可以通过以下命令来查看手机当前用到的 Graphic Buffer 情况:

关于上面的命令,你可能会好奇这个 SurfaceFlinger 是什么东西啊?

上文提到过每个应用(一般)对应一个 Surface ,从字面意思看, SurfaceFlinger 就是把应用的 Surface 投射到目的地。

实际上, SurfaceFlinger 就是界面(Buffer)合成的负责人,在应用界面绘制的场景, SurfaceFlinger 充当了 BufferQueue 的消费者。绘制好的 Graphic Buffer 会进入(queue)队列, SurfaceFlinger 会在合适的时机(这个时机下文讨论),从队列中取出(acquire)Buffer数据进行处理。

我们知道,除了我们的应用界面,手机屏幕上同时显示着其他内容,比如SystemUI(状态栏、导航栏)或者另外的悬浮窗等,这些部分的都有各自的Surface,当然也会往对应的 BufferQueue 中生产 Graphic Buffer 。

如下图所示, SurfaceFlinger 获取到所有Surface的最新Buffer之后,会配合HWComposer进行处理合成,最终把这些Buffer的数据合成到一个 FrameBuffer 中,而FrameBuffer的数据会在另一个合适的时机(同样下文讨论)迅速地显示到屏幕上,这时用户才观察到屏幕上的变化。

关于上图中的 HWComposer ,它是Android HAL接口中的一部分,它定义了上层需要的能力,让由硬件提供商来实现,因为不同的屏幕硬件差别很大,让硬件提供商驱动自己的屏幕,上层软件无需关心屏幕硬件的兼容问题。

事实上,如果你观察足够仔细的话,可能对上图还有疑问:

同学你观察很仔细(...),事实上,这是 SurfaceFlinger 合成过程中重要的细节,对于不同 Surface 的Buffer, 合成的方法有两种:

显然第一种方法是最高效的,但为了保证正确性,Android系统结合了两种方法。具体实现上, SurfaceFlinger 会询问( prepare ) HWComposer 是否支持直接合成,之后按照结果做对应处理。

有的朋友憋不住了:

Good question! (太做作了。。。)

为了保证最好的渲染性能,上面各个步骤之间并不是串行阻塞运行的关系,所以有一个机制来调度每一步的触发时机,不过在此之前,我们先讲介绍一个更基础的概念:

屏幕刷新率

刷新率是屏幕的硬件指标,单位是Hz(赫兹),意思是屏幕每秒可以刷新的次数。

回到问题,既然屏幕这个硬件每隔一段时间(如60Hz屏幕是16ms)就刷新一次,最佳的方案就是屏幕刷新时开始新一轮的绘制流程,让一次绘制的流程尽可能占满整个刷新周期,这样掉帧的可能性最小。基于这样的思考,在Android4.1(JellyBean)引入 VSYNC(Vertical Synchronization - 垂直同步信号)

收到系统发出的VSYNC信号后, 有三件事会同时执行(并行)

下图描述了没有掉帧时的VSYNC执行流程,现在我们可以直接回答问题了: 合适的时机就是VSYNC信号

从上图可以看出,在一次VSYNC信号发出后,屏幕立即显示2个VSYNC周期(60Hz屏幕上就是32ms)之前开始绘制的图像,这当然是延迟,不过这个延迟非常稳定, 只要前面的绘制不掉链子 ,界面也是如丝般顺滑。当然,Android还是推出一种机制让延迟可以缩小到1个VSYNC周期,详情可参考 VSYNC-offset 。

实际上,系统只会在需要的时候才发出VSYNC信号,这个开关由SurfaceFlinger来管理。应用也只是在需要的时候才接收VSYNC信号,什么时候需要呢?也就是应用界面有变化,需要更新了,具体的流程可以参考 View.requestLayout() 或 View.invalidate() 到 Choreographer (编舞者)的调用过程。这个过程会注册一次VSYNC信号,下一次VSYNC信号发出后应用就能收到了,然后开始新的绘制工作;想要再次接收VSYNC信号就需要重新注册,可见,应用界面没有改变的时候是不会进行刷新的。

我们可以看到,无论是VSYNC开关,还是应用对VSYNC信号的单次注册逻辑,都是秉承着按需分配的原则,这样的设计能够带来Android操作系统更好的性能和更低的功耗。

Tip:

终于。。。说完了

我们简单回顾一下,

更形象一点就是:

之所以有这一节,是因为随着Android版本的更替,渲染方案也发生了很多变化。为了简化表达,我们前文都以当前最新的方案来讲解,事实上,部分流程的实现方式在不同版本可能会有较大的变化,甚至在之前版本没有实现方案,这里我尽可能详细地列出Android版本更迭过程中与渲染相关的更新(包括监控工具)。

如果你居然能读到这里,那我猜你对下面的参考文章也会感兴趣:

https://source.android.com/devices/graphics

https://hencoder.com/tag/hui-/

https://www.youtube.com/watch?v=wIy8g8yNhNk&feature=emb_logo

https://www.youtube.com/watch?v=v9S5EO7CLjo

https://www.youtube.com/watch?v=zdQRIYOST64&t=177s

https://www.youtube.com/watch?v=we6poP0kw6E&index=64&list=

https://developer.android.com/topic/performance/rendering

https://developer.android.com/guide/topics/graphics/hardware-accel

https://developer.android.com/topic/performance/rendering/profile-gpu#su

https://mp.weixin.qq.com/s/0OOSmrzSkjG3cSOFxWYWuQ

Android Developer Backstage - Android Rendering

Android Developer Backstage - Graphics Performance

https://elinux.org/images/2/2b/Android_graphics_path--chis_simmonds.pdf

阅读全文

与安卓程序编写怎么做图片在界面上相关的资料

热点内容
不许宣读命令 浏览:694
寻找信号源源码 浏览:79
打电话老服务器错误是什么原因 浏览:489
三维溯源码 浏览:714
android录音开源 浏览:459
弗洛伊德算法c 浏览:10
udp命令字 浏览:659
app服务端java源码 浏览:798
电脑用文件夹玩大型游戏 浏览:254
安卓耳塞失灵怎么办 浏览:765
华三交换机保存命令 浏览:605
命令方块怎么调键盘 浏览:841
不把密码存在服务器上怎么办 浏览:398
怎么让指令方块的命令消失 浏览:543
用单片机做plc 浏览:404
云服务器进入子目录命令 浏览:795
服务器机柜如何配电 浏览:578
怎么删除iphone资源库里的app 浏览:940
pdf鱼 浏览:648
单片机pcf8591什么作用 浏览:805