```
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/colorAccent" />
<!-- 这里是设置为四周 也可以单独设置某个位置为圆角-->
<corners android:topLeftRadius="5dp"
android:topRightRadius="5dp"
android:bottomRightRadius="5dp"
android:bottomLeftRadius="5dp"/>
<stroke android:width="1dp" android:color="#000000" />
</shape
```
```
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 边框颜色值 -->
<item>
<shape>
<solid android:color="#3bbaff" />
</shape>
</item>
<!--这个是按钮边框设置为四周 并且宽度为1-->
<item
android:right="1dp"
android:left="1dp"
android:top="1dp"
android:bottom="1dp">
<shape>
<!--这个是背景颜色-->
<solid android:color="#ffffff" />
<!--这个是按钮中的字体与按钮内的四周边距-->
<padding android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
</shape>
</item>
</layer-list>
```
使用:
```android:background="@drawable/button_edge"```
```
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 填充的颜色 -->
<solid android:color="#FFFFFF" />
<!-- android:radius 弧形的半径 -->
<!-- 设置按钮的四个角为弧形 -->
<corners
android:radius="5dip" />
<!--也可单独设置-->
<!-- <corners -->
<!-- android:topLeftRadius="10dp"-->
<!-- android:topRightRadius="10dp"-->
<!-- android:bottomRightRadius="10dp"-->
<!-- android:bottomLeftRadius="10dp"-->
<!-- /> -->
**设置文字padding**
<!-- padding:Button里面的文字与Button边界的间隔 -->
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp"
/>
</shape>
```
```
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
</shape>
```
使用:
```
android:background="@drawable/image_circle"
```
```
Glide.with(MainActivity.this).load(croppedUri)
.transform(new GlideRectRound(MainActivity.this,6)).into(headIcon)
```
```
import android.content.Context
import android.content.res.Resources
import android.graphics.Bitmap
import android.graphics.BitmapShader
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
import android.util.Log
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
/**
* Created by SiHao on 2018/3/3.
* Glide 的 圆角 图片 工具类
*/
public class GlideRectRound extends BitmapTransformation {
private static float radius = 0f
// 构造方法1 无传入圆角度数 设置默认值为5
public GlideRectRound(Context context) {
this(context, 5)
}
// 构造方法2 传入圆角度数
public GlideRectRound(Context context, int dp) {
super(context)
// 设置圆角度数
radius = Resources.getSystem().getDisplayMetrics().density * dp
}
// 重写该方法 返回修改后的Bitmap
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return rectRoundCrop(pool,toTransform)
}
@Override
public String getId() {
Log.e("getID",getClass().getName() + Math.round(radius))
return getClass().getName() + Math.round(radius) // 四舍五入
}
private Bitmap rectRoundCrop(BitmapPool pool, Bitmap source){
if (source == null) return null
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888)// ARGB_4444——代表4x4位ARGB位图,ARGB_8888——代表4x8位ARGB位图
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888)
}
Canvas canvas = new Canvas(result)
Paint paint = new Paint()
// setShader 对图像进行渲染
// 子类之一 BitmapShader设置Bitmap的变换 TileMode 有CLAMP (取bitmap边缘的最后一个像素进行扩展),REPEAT(水平地重复整张bitmap)
//MIRROR(和REPEAT类似,但是每次重复的时候,将bitmap进行翻转)
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP))
paint.setAntiAlias(true) // 抗锯齿
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight())
canvas.drawRoundRect(rectF, radius, radius, paint)
return result
}
}
```
圆角:
```
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapShader
import android.graphics.Canvas
import android.graphics.Paint
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
/**
* Created by SiHao on 2018/3/3.
* Glide圆形图片工具类
*/
public class GlideCircleBitmap extends BitmapTransformation{
public GlideCircleBitmap(Context context) {
super(context)
}
// 重写该方法 返回修改后的Bitmap
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return circleCrop(pool, toTransform)
}
@Override
public String getId() {
return getClass().getName()
}
private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null
// 边长取长宽最小值
int size = Math.min(source.getWidth(), source.getHeight())
int x = (source.getWidth() - size) / 2
int y = (source.getHeight() - size) / 2
// TODO this could be acquired from the pool too
Bitmap squared = Bitmap.createBitmap(source, x, y, size, size)
Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888)// ARGB_4444——代表4x4位ARGB位图,ARGB_8888——代表4x8位ARGB位图
if (result == null) {
result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888)
}
Canvas canvas = new Canvas(result)
Paint paint = new Paint()
// setShader 对图像进行渲染
// 子类之一 BitmapShader设置Bitmap的变换 TileMode 有CLAMP (取bitmap边缘的最后一个像素进行扩展),REPEAT(水平地重复整张bitmap)
//MIRROR(和REPEAT类似,但是每次重复的时候,将bitmap进行翻转)
paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP))
paint.setAntiAlias(true)// 抗锯齿
// 半径取 size的一半
float r = size / 2f
canvas.drawCircle(r, r, r, paint)
return result
}
}
```
```
URL url = new URL(String类型的字符串) //将String类型的字符串转换为URL格式
holder.UserImage.setImageBitmap(BitmapFactory.decodeStream(url.openStream()))
```
```
//得到资源文件的BitMap
Bitmap image= BitmapFactory.decodeResource(getResources(),R.drawable.dog)
//创建RoundedBitmapDrawable对象
RoundedBitmapDrawable roundImg =RoundedBitmapDrawableFactory.create(getResources(),image)
//抗锯齿
roundImg.setAntiAlias(true)
//设置圆角半径
roundImg.setCornerRadius(30)
//设置显示图片
imageView.setImageDrawable(roundImg)
```
```
//如果是圆的时候,我们应该把bitmap图片进行剪切成正方形, 然后再设置圆角半径为正方形边长的一半即可
Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.dog)
Bitmap bitmap = null
//将长方形图片裁剪成正方形图片
if (image.getWidth() == image.getHeight()) {
bitmap = Bitmap.createBitmap(image, image.getWidth() / 2 - image.getHeight() / 2, 0, image.getHeight(), image.getHeight())
} else {
bitmap = Bitmap.createBitmap(image, 0, image.getHeight() / 2 - image.getWidth() / 2, image.getWidth(), image.getWidth())
}
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap)
//圆角半径为正方形边长的一半
roundedBitmapDrawable.setCornerRadius(bitmap.getWidth() / 2)
//抗锯齿
roundedBitmapDrawable.setAntiAlias(true)
imageView.setImageDrawable(roundedBitmapDrawable)
```
android设置TextView控件的背景透明度和字体透明度2014-06-12 13:36:54 By: dwtedx
Android
dwtedx
0
11652
应用场景:有如下控件、要设置其为透明样式
TextView tv = (TextView) findViewById(R.id.xx)
第1种方法:
tv.setBackgroundColor(Color.argb(255, 0, 255, 0))//背景透明度
tv.setTextColor(Color.argb(255, 0, 255, 0)) //文字透明度
第2种方法:
tv.setTextColor(0xffff00ff)
0xffff00ff是int类型的数据,分组一下0x|ff|ff00ff,0x是代表颜色整数的标记,ff是表示透明度,ff00ff表示颜色,
注意:这里ffff00ff必须是8个的颜色表示,不接受ff00ff这种6个的颜色表示。
颜色和不透明度 (alpha) 值以十六进制表示法表示。
任何一种颜色的值范围都是 0 到 255(00 到 ff)。
对于 alpha,00 表示完全透明,ff 表示完全不透明。
表达式顺序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00到ff);“rr=red”(00 到 ff)。
例如,如果设置字体颜色的不透明度为 50% 的蓝色,
则应指定以下值:7fff0000(如何把十进制的50换算成十六进制的50:十进制到其他进制用除,一直除到商为0,
然后每次余数逆序排列就是结果,其他进制到十进制用乘,比如此处用到除法,
80/16商5余0,再用前一次的商除16得商0余5,停止相除,逆序排列余数得到0x50)。
第3种方法:
在xml文件中直接设置颜色值,同下。
Button或者ImageButton的背景设为透明或者半透明
xml文件
半透明
<Button Android:background="#e0000000" ... />
透明
<Button android:background="#00000000" ... />
Java代码
View v = findViewById(R.id.xx)//找到你要设透明背景的layout 的id
v.getBackground().setAlpha(100)//0~255透明度值
我们知道,在styles.xml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:
至于各种控件是如何应用这些颜色设置的,则需要经过更多的尝试了。
比如Activity导航栏默认的图标颜色是colorControlNormal,导航栏的底色是colorPrimary,沉浸式状态栏默认的颜色是colorPrimaryDark;
比如FAB的默认颜色是colorAccent;
比如AppCompatCheckBox默认的选中状态的颜色是colorAccent,而默认的未选择状态的颜色的colorControlNormal;
比如AppCompatSpinner的下拉图标的默认颜色也是colorControlNormal。
......
其实涉及到的主要的就是下面这几个参数:
那么问题来了,如果你使用蓝色的沉浸式状态栏,导航栏上的图标则使用白色,那在这个Activity中使用AppCompatCheckBox的时候,未选择状态就也是白色的,此时如果在白色的背景色下,用户就看不出这是个AppCompatCheckBox了。这时候怎么办?如下图(图中使用的是AppCompatSpinner):
其实很简单,在这个AppCompatCheckBox上使用app:theme="@style/MyCheckBox",然后在styles.xml中添加新的
但是需要注意的是,这样可能引起控件其他默认属性的变化,比如CheckBox的textSize会变成1(不使用app:theme的时候和APP的默认字体大小一样)。
android:theme和app:popupTheme的作用,以及在android 3.0以下不起作用问题的解决
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)