首页 文章 精选 留言 我的

精选列表

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

UI组件-ImageView及其子类

前言 时间有限,追索生命的诚意和真实,比什么都重要。 ImageView组件 ImageView继承自View组件,它的主要功能是用于显示任何Drawable对象。 为了控制ImageView显示的图片,ImageView提供了下列方法。 setImageBitmap(Bitmap bm):使用Bitmap位图设置该ImageView显示的图片。 setImageDrawable(Drawable drawable):使用Drawable对象设置该ImageView显示的图片。 setImageResource(int resId):使用图片资源ID设置该ImageView显示的图片。 setImageURI(Uri uri):使用图片的URI设置该ImageView显示的图片。 示例代码 本例的图片浏览器不仅可以改变图片的透明度,还可以查看图片指定区域的细节。 main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 定义三个按钮 --> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" > <Button android:id="@+id/plus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增大透明度" /> <Button android:id="@+id/minus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="减小透明度" /> <Button android:id="@+id/next" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下一张" /> </LinearLayout> <!-- 定义显示图片整体的ImageView --> <ImageView android:id="@+id/image1" android:layout_width="wrap_content" android:layout_height="360dp" android:src="@drawable/baxianhua" android:scaleType="fitCenter" /> <!-- 定义显示图片局部细节的ImageView --> <ImageView android:id="@+id/image2" android:layout_width="240dp" android:layout_height="240dp" android:background="#00f" android:layout_margin="10dp" /> </LinearLayout> MainActivity.java public class MainActivity extends Activity { //定义一个访问图片的数组 int []images = new int[] { R.drawable.baxianhua, R.drawable.dengta, R.drawable.juhua, R.drawable.kaola, R.drawable.qie, R.drawable.shamo, R.drawable.shuimo, R.drawable.yujinx, }; //定义默认显示的图片 int currentImg = 2; //定义图片的初始透明度 private int alpha = 255; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Button minus = (Button) findViewById(R.id.minus); final Button plus = (Button) findViewById(R.id.plus); final Button next = (Button) findViewById(R.id.next); final ImageView image1 = (ImageView) findViewById(R.id.image1); final ImageView image2 = (ImageView) findViewById(R.id.image2); //定义查看下一张图片按钮的监听器 next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //控制ImageView显示下一张图片 image1.setImageResource(images[++currentImg % images.length]); } }); //定义改变图片透明度的方法 View.OnClickListener listener = new OnClickListener() { @Override public void onClick(View v) { if(v == plus) { alpha -= 20; } if(v == minus) { alpha += 20; } if(alpha >= 255) { alpha = 255; } if(alpha <= 0) { alpha = 0; } //改变图片透明度 image1.setImageAlpha(alpha); } }; //为两个按钮添加监听器 plus.setOnClickListener(listener); minus.setOnClickListener(listener); image1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { BitmapDrawable bitmapDrawable = (BitmapDrawable) image1.getDrawable(); //获取第一个图片显示框中的位图 Bitmap bitmap = bitmapDrawable.getBitmap(); //bitmap图片实际大小与第一个ImageView的缩放比例 double scale = 1.0 * bitmap.getHeight()/image1.getHeight(); //获取需要显示的图片的开始点 int x = (int)(event.getX() * scale); int y = (int)(event.getY() * scale); if(x + 240 > bitmap.getWidth()) { x = bitmap.getWidth() - 240; } if(y + 240 > bitmap.getHeight()) { y = bitmap.getHeight() - 240; } //显示图片的指定区域 image2.setImageBitmap(bitmap.createBitmap(bitmap, x, y, 240, 240)); image2.setImageAlpha(alpha); return false; } }); } } 效果 Screenshot_2017-10-18-16-07-20.png 提示 andriod:scaleType属性,设置所显示的图片如何缩放或移动以适应ImageView的大小。常用属性值如下。 matrix:使用matrix方式进行缩放。 fitXY:对图片横向、纵向独立缩放,使得该图片完全适应于该ImageView,图片的纵横比可能会改变。 fitStart:保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后将该图片放在ImageView的左上角。 fitCenter:保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后将该图片放在ImageView的中央。 fitEnd:保持纵横比缩放图片,直到该图片能完全显示在ImageView中,缩放完成后将该图片放在ImageView的右下角。 center:把图片放在ImageView的中间,但不进行任何缩放。 ImageButton组件 ImageButton与Button的区别在于,Button生成的按钮上显示文字,而ImageButton上则显示图片。ImageButton派生了一个ZoomButton,可以代表“放大”、“缩小”两个按钮。 代码示例 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 定义ZoomControls组件 --> <ZoomControls android:id="@+id/zoomControls1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" /> </LinearLayout> 效果 Screenshot_1508379554.png QuickContactBadge组件 QuickContactBadge继承了ImageView,因为它的本质是图片按钮,也可以通过andriod:src属性指定它显示的图片。额外增加的功能是该图片可以关联到手机中指定的联系人,当用户单击该图片时,系统将会打开相应联系人的联系方式界面。为了让QuickContactBadge与特定联系人关联,可以调用如下方法。 assignContactFromEmail(String emailAddapp\src\main\ress,boolean lazyLookup):将该图片关联到指定E-mail地址对应的联系人。 assignContactFromPhone(String phoneNumber,boolean lazyLookup):将该图片关联到指定电话号码对应的联系人。 assignContactUri(Uri contactUri):将该图片关联到特定Uri对应的联系人。 代码示例 contact.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <QuickContactBadge android:id="@+id/badge" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16dp" android:text="halo" /> </LinearLayout> MainActivity.java public class MainActivity extends Activity { QuickContactBadge badge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.contact); //获取QuickContactBadge组件 badge = (QuickContactBadge) findViewById(R.id.badge); //将QuickContactBadge组件与特定电话号码对应的联系人建立关联 badge.assignContactFromPhone("010-666666", false); } } 效果 Screenshot_1508380462.png 使用QuickContactBadge打开的特定联系人 Screenshot_1508380482.png

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

Android UI布局之FrameLayout

一个FrameLayout对象就好比一块屏幕上提前预定好的空白区域。然后能够填充一些元素到里边。例如说一张图片等。须要注意的是,全部的元素都被放置在FrameLayout区域最左边上的区域。并且无法为这些元素指定一个确切的位置。假设一个FrameLayout里边有多个子元素。那么后边的子元素的显示会重叠在前一个元素上。 实例:LayoutDemo 执行效果: 代码清单: 布局文件:frame_layout.xml <?xml version="1.0" encoding="utf-8"? > <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/photo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bg" /> </FrameLayout> android:id 定义组件的id,在应用程序中。我们通过这个id就能够訪问到定义的这个元素。 android:layout_width="match_parent" 和android:layout_height="match_parent" 表示FrameLayout布局能够在x轴方向和y轴方向填充满父容器的空间。 android:layout_width="wrap_content" 和android:layout_height+"wrap_content" 表示ImageView元素的长和宽仅仅须要将bg.jpg包裹起来就可以,并不须要填充满父容器。 Java源码文件:FrameLayoutActivity.java package com.rainsong.layoutdemo; import android.app.Activity; import android.os.Bundle; public class FrameLayoutActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.frame_layout); } } 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5245561.html,如需转载请自行联系原作者

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

Android UI开发第二十三篇——分享书架UI实现

android中有很多的电子书阅读应用,应用中都仿真了书架的实现,这里也分享一篇读书应用的书架实现: java: public class ShelvesView extends GridView { private Bitmap mShelfBackground; private int mShelfWidth; private int mShelfHeight; private Bitmap mWebLeft; private Bitmap mWebRight; private int mWebRightWidth; public ShelvesView(Context context) { super(context); init(context); } public ShelvesView(Context context, AttributeSet attrs) { super(context, attrs); load(context, attrs, 0); init(context); } public ShelvesView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); load(context, attrs, defStyle); init(context); } private void load(Context context, AttributeSet attrs, int defStyle) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShelvesView, defStyle, 0); final Resources resources = getResources(); final int background = a.getResourceId(R.styleable.ShelvesView_shelfBackground, 0); final Bitmap shelfBackground = BitmapFactory.decodeResource(resources, background); if (shelfBackground != null) { mShelfWidth = shelfBackground.getWidth(); mShelfHeight = shelfBackground.getHeight(); mShelfBackground = shelfBackground; } mWebLeft = BitmapFactory.decodeResource(resources, R.drawable.web_left); final Bitmap webRight = BitmapFactory.decodeResource(resources, R.drawable.web_right); mWebRightWidth = webRight.getWidth(); mWebRight = webRight; a.recycle(); } private void init(Context context) { StateListDrawable drawable = new StateListDrawable(); SpotlightDrawable start = new SpotlightDrawable(context, this); start.disableOffset(); SpotlightDrawable end = new SpotlightDrawable(context, this, R.drawable.spotlight_blue); end.disableOffset(); TransitionDrawable transition = new TransitionDrawable(start, end); drawable.addState(new int[] { android.R.attr.state_pressed }, transition); final SpotlightDrawable normal = new SpotlightDrawable(context, this); drawable.addState(new int[] { }, normal); normal.setParent(drawable); transition.setParent(drawable); setSelector(drawable); setDrawSelectorOnTop(false); } @Override protected void dispatchDraw(Canvas canvas) { final int count = getChildCount(); final int top = count > 0 ? getChildAt(0).getTop() : 0; final int shelfWidth = mShelfWidth; final int shelfHeight = mShelfHeight; final int width = getWidth(); final int height = getHeight(); final Bitmap background = mShelfBackground; for (int x = 0; x < width; x += shelfWidth) { for (int y = top; y < height; y += shelfHeight) { canvas.drawBitmap(background, x, y, null); } } if (count == 0) { canvas.drawBitmap(mWebLeft, 0.0f, top + 1, null); canvas.drawBitmap(mWebRight, width - mWebRightWidth, top + shelfHeight + 1, null); } super.dispatchDraw(canvas); } @Override public void setPressed(boolean pressed) { super.setPressed(pressed); final Drawable current = getSelector().getCurrent(); if (current instanceof TransitionDrawable) { if (pressed) { ((TransitionDrawable) current).startTransition( ViewConfiguration.getLongPressTimeout()); } else { ((TransitionDrawable) current).resetTransition(); } } } } 代码:http://download.csdn.net/detail/xyz_lmn/4698124 本文转自xyz_lmn51CTO博客,原文链接:http://blog.51cto.com/xyzlmn/1230767,如需转载请自行联系原作者

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

前端 UI 框架 Svelte 4 发布

距离 Svelte 3 发布已经过去了四年多的时间,经过几个月的筹备,Svelte 4 稳定版本于今天正式发布。 新版本改进了性能、优化了开发者体验,并大改了网站。Svelte 4 主要是一个维护版本,它为下一代的 Svelte 发布奠定了基础。 性能 这个版本使 hydration 代码更小更快。为了看到其影响,SvelteKit 用户可以通过检查.svelte-kit/output/client/_app/immutable/nodes文件夹来看到其编译后的输出尺寸缩小。例如,在kit.svelte.dev 上,整个网站生成的 JS 大小减少了 12.7%。 Svelte 4 将 Svelte 包的大小减少了近 75%,这意味着在npm install上的等待时间减少了。对于第一次在 learn.svelte.dev 上加载交互式学习体验的用户、Svelte REPL 的用户以及网络条件有限的用户来说,这一改进将尤为明显。剩下的大部分软件包大小是对 eslint 的支持,这就需要发布一个 CJS 构建,一旦 eslint 重写完成,Svelte的软件包大小可以再下降 50% 以上。 Svelte 中依赖的数量已经从 61 个大大减少到 16 个。这意味着用户下载速度更快,也更不容易受到供应链攻击的影响。 开发者体验 Svelte 4 使 Svelte 的创作体验更加直观和一致: |local现在是转换的默认值,以避免动画阻碍页面转换,预处理程序现在更容易编写,多项修正使 CSP 更容易设置和使用。 对于 Web 组件的用户来说,最大的变化是对你使用 Svelte 编写自定义元素的方式进行了全面修改。通过改变它们的生成方式,可以消除了一大类错误和不一致的地方。 最后,还做了几项改进 IDE 编写的体验:“cmd + 点击” svelte 模块现在可以带你到实现,而不是.d.ts文件。 从svelte/internal导入的文件现在被隐藏,不会干扰自动补全建议,自动导入现在更可靠。 更新了网站、文档和教程 官方 svelte.dev 网站已经进行了大改。它现在被分割成多个页面,并改进了导航、更新了 TypeScript 文档、黑暗模式和增强的 REPL。SvelteKit 网站也在进行更新,以与之匹配。还更新了所有的教程链接,以指向新的 learn.svelte.dev。旧的教程仍然适用于 Safari 16.3 及以前的用户。 更多详情可查看:https://github.com/sveltejs/svelte/releases/tag/svelte%404.0.0

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册