[图文]Android Studio下载安装及配置开发环境教程
http://www.111cn.net/sj/android/74261.htm
win7X64下Android Stuido安装及搭建开发环境问题解决
http://www.111cn.net/sj/android/74265.htm
mac下载安装Android Studio配置开发环境教程
http://www.111cn.net/sj/android/74262.htm
总结android studio注意事项及打不开等问题解决方法
http://www.111cn.net/sj/android/74264.htm
小结Android Studio常用设置说明教程
http://www.111cn.net/sj/android/74263.htm
总结Android Studio导入项目的几种方法
http://www.111cn.net/sj/android/74260.htm
[最新图文版]如何将项目从eclipse迁移到android studio?
http://www.111cn.net/sj/android/74224.htm
一、概述
Android实现圆角矩形,圆形或者椭圆等图形,一般主要是个自定义View加上使用Xfermode实现的。实现圆角图片的方法其实不少,常见的就是利用Xfermode,Shader。本文直接继承ImageView,使用BitmapShader方法来实现圆形、圆角和椭圆的绘制,等大家看我本文的方法后,其他的类似形状也就都能举一反三来来画出来了。
二、效果图:
三、BitmapShader简介
BitmapShader是Shader的子类,可以通过Paint.setShader(Shader shader)进行设置、
我们这里只关注BitmapShader,构造方法:
mBitmapShader = new BitmapShader(bitmap, TileMode.CLAMP, TileMode.CLAMP);
参数1:bitmap
参数2,参数3:TileMode;
TileMode的取值有三种:
CLAMP 拉伸
REPEAT 重复
MIRROR 镜像
如果大家给电脑屏幕设置屏保的时候,如果图片太小,可以选择重复、拉伸、镜像;
重复:就是横向、纵向不断重复这个bitmap
镜像:横向不断翻转重复,纵向不断翻转重复;
拉伸:这个和电脑屏保的模式应该有些不同,这个拉伸的是图片最后的那一个像素;横向的最后一个横行像素,不断的重复,纵项的那一列像素,不断的重复;
public BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY)
调用这个方法来产生一个画有一个位图的渲染器(Shader)。
bitmap 在渲染器内使用的位图
tileX The tiling mode for x to draw the bitmap in. 在位图上X方向花砖模式
tileY The tiling mode for y to draw the bitmap in. 在位图上Y方向花砖模式
TileMode:(一共有三种)
CLAMP :如果渲染器超出原始边界范围,会复制范围内边缘染色。
REPEAT :横向和纵向的重复渲染器图片,平铺。
MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT 重复方式不一样,他是以镜像方式平铺。
四、自定义圆形、圆角和椭圆的图片View的实现
1. 测量View的大小
代码如下 | 复制代码 |
@Override } |
2、设置BitmapShader和画笔Paint
代码如下 | 复制代码 |
/** } else if (mType == TYPE_ROUND || mType == TYPE_OVAL) { } |
3.最后就是绘制出来圆角、圆形和椭圆的图片,肯定在onDraw里面啦,根本原理就是使用了上面mBitmapShader渲染的画笔来绘制
代码如下 | 复制代码 |
@Override if (null == getDrawable()) { |
五、视图布局实现
这个很简单,就是3个自定义的view:
代码如下 | 复制代码 |
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout <com.czm.viewdrawtest.XCRoundAndOvalImageView <com.czm.viewdrawtest.XCRoundAndOvalImageView <com.czm.viewdrawtest.XCRoundAndOvalImageView </ScrollView> |
六、使用和测试自定义View
上面直接绘制的自定义View写完了,下面就是使用这个View了,使用方法和普通的ImageView一样,当作普通控件使用即可。
代码如下 | 复制代码 |
package com.czm.viewdrawtest;
private XCRoundAndOvalImageView circleImageView;//圆形图片 |
在开发Android应用教程时,有时会让Android自动重启关机,如何用JAVA实现呢?现在我们来分享一段实现Android关机重启的JAVA代码。
实现系统重启的APK需要system的权限,在AndroidManifest.xml中增加android:sharedUserId="android.uid.system",再修改签名即可;
具体方法参考:
点击打开链接
1、使用PowerManager来实现:
代码:
private void rebootSystem(){
PowerManager pManager=(PowerManager) getSystemService(Context.POWER_SERVICE);
pManager.reboot("");
}
2、发送REBOOT广播:
代码:
private void rebootSystem(){
Intent reboot = new Intent(Intent.ACTION_REBOOT);
reboot.putExtra("nowait", 1);
reboot.putExtra("interval", 1);
reboot.putExtra("window", 0);
sendBroadcast(reboot);
}
我想使用 ACTION_SEND 共享图片+文字,我运行了下面的代码,暂时只能共享图片,无法共享文字,我如何才能共享?
代码如下 | 复制代码 |
private Uri imageUri; private Intent intent; imageUri = Uri.parse("android.resource://" + getPackageName() + "/drawable/" + "ic_launcher"); intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_TEXT, "Hello"); intent.putExtra(Intent.EXTRA_STREAM, imageUri); intent.setType("image/*"); startActivity(intent); |
//如何才能共享图片?
处理方法
你可以共享下面的代码:
代码如下 | 复制代码 |
String shareBody = "Here is the share content body"; Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.share_using))); |
所以你的全部代码(图片+文本)需要变成
代码如下 | 复制代码 |
private Uri imageUri; private Intent intent; imageUri = Uri.parse("android.resource://" + getPackageName() + "/drawable/" + "ic_launcher"); intent = new Intent(Intent.ACTION_SEND); //text intent.putExtra(Intent.EXTRA_TEXT, "Hello"); //image intent.putExtra(Intent.EXTRA_STREAM, imageUri); //type of things intent.setType("*/*"); //sending startActivity(intent); |
首先需要明白任务栈:
栈是先进后出,activity才用不同的启动模式,当每次访问他时会采取完全不同的操作。
1、标准模式
android:launchMode=”standard” />
每次访问activity都会再栈内创建一个实例
2、栈顶模式--singleTop
如果访问一个activity时,该activity的时候刚好在栈顶,那么不会再次实例化对象,而是访问这个栈顶已经存在的实例,比如一个activity设置的是栈顶模式,当在他自己界面再往自己界面跳转的时候就不会再实例化一个自己实例出来。
3、singleTask
如果你访问的这个activity,已经在栈中有了一个实例,那么就不会再次生成activity的实例,而是访问这个已经在栈中存在的实例,并且将所有在该栈上面的activity全部移除,这样它就是在栈顶了。
4、单例模式--singleInstance
比如浏览器,如果一个程序打开了浏览器,另外一个程序又要打开浏览器,那么就会跳转到已经打开的浏览器界面,这样可以避免资源的浪费。