androidsetstyle
㈠ android 怎样在代码中给widget设置字体
android给控件widget设置自定义字体的方式如下:
自定义字体必须放到asset目录下,需要调用context.getAssets()方法获取自定义字体的资源,由于android Widget是依赖于其他进程存在,故widget中无法使用字体设置的.setTypeface方法,因此在Widget中使用自定义字体,可以将字体转换为图片输出以后,用views.setImageViewBitmap方法可实现自定义功能,参考代码:
java">staticBitmapbuildUpdate(Stringtime,Contextcontext){
BitmapmyBitmap=Bitmap.createBitmap(240,80,Bitmap.Config.ARGB_4444);
CanvasmyCanvas=newCanvas(myBitmap);
Paintpaint=newPaint();
Typefacetf=Typeface.createFromAsset(context.getAssets(),"fonts/Clockopia.ttf");
paint.setAntiAlias(true);
paint.setAlpha(110);//取值范围为0~255,值越小越透明
paint.setSubpixelText(true);
paint.setTypeface(tf);
paint.setStyle(Paint.Style.FILL);
paint.setColor(Color.WHITE);
paint.setTextSize(80);
paint.setTextAlign(Align.CENTER);
myCanvas.drawText(time,100,60,paint);
returnmyBitmap;
}
//widget中调用
RemoteViewsmViews=newRemoteViews(context.getPackageName(),R.layout.main);
mViews.setImageViewBitmap(R.id.imageView1,buildUpdate(time,context));
㈡ android 如何重写imageview 让图片有圆角效果
android 自定义圆角ImageView以及锯齿的处理
看到很多人开发过程中要使用圆角图片时,解决方法有:
1.重新绘制一张图片
2.通过布局来配置
3.通过重写View来实现
其中1,2在这里就不讲了,重点讲讲方法三的实现。
实现一:通过截取画布一个圆形区域与图片的相交部分进行绘制,缺点:锯齿明显,设置Paint,Canvas抗锯齿无效。
package com.open.circleimageview.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.View;
public class CircleImageViewA extends View {
public CircleImageViewA(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CircleImageViewA(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageViewA(Context context) {
super(context);
}
private Bitmap bitmap;
private Rect bitmapRect=new Rect();
private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
private Paint paint = new Paint();
{
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
}
private Path mPath=new Path();
public void setImageBitmap(Bitmap bitmap)
{
this.bitmap=bitmap;
}
@Override
protected void onDraw(Canvas canvas) {
if(null==bitmap)
{
return;
}
bitmapRect.set(0, 0, getWidth(), getHeight());
canvas.save();
canvas.setDrawFilter(pdf);
mPath.reset();
canvas.clipPath(mPath); // makes the clip empty
mPath.addCircle(getWidth()/2, getWidth()/2, getHeight()/2, Path.Direction.CCW);
canvas.clipPath(mPath, Region.Op.REPLACE);
canvas.drawBitmap(bitmap, null, bitmapRect, paint);
canvas.restore();
}
}
实现二:通过PorterDuffXfermode 方式(注意要设置硬件加速,否则部分机子无效),优点:锯齿基本没有
package com.open.circleimageview.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class CircleImageViewB extends View {
public CircleImageViewB(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public CircleImageViewB(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleImageViewB(Context context) {
super(context);
init();
}
private Bitmap bitmap;
private Rect bitmapRect=new Rect();
private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
private Paint paint = new Paint();
{
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
}
private Bitmap mDstB=null;
private PorterDuffXfermode xfermode=new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY);
private void init()
{
try {
if(android.os.Build.VERSION.SDK_INT>=11)
{
setLayerType(LAYER_TYPE_SOFTWARE, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void setImageBitmap(Bitmap bitmap)
{
this.bitmap=bitmap;
}
private Bitmap makeDst(int w, int h)
{
Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.parseColor("#ffffffff"));
c.drawOval(new RectF(0, 0, w, h), p);
return bm;
}
@Override
protected void onDraw(Canvas canvas) {
if(null==bitmap)
{
return;
}
if(null==mDstB)
{
mDstB=makeDst(getWidth(), getHeight());
}
bitmapRect.set(0, 0, getWidth(), getHeight());
canvas.save();
canvas.setDrawFilter(pdf);
canvas.drawBitmap(mDstB, 0, 0, paint);
paint.setXfermode(xfermode);
canvas.drawBitmap(bitmap, null, bitmapRect, paint);
paint.setXfermode(null);
canvas.restore();
}
}
㈢ Android 开发中 对下上两个图层的相关操作问题
黑色其实算是canvas板上的。
你想要那种透明可以看到activity的效果是需要在canvas上设置一个bitmap才可以的。
Canvas canvas = new Canvas();
canvas.setBitmap(bm_);
p.setColor(Color.TRANSPARENT);
p.setAntiAlias(true);
p.setStyle(Style.FILL);
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.save();
Rect r = new Rect(0,0,w*2,h*2);
canvas.drawRect(r, p);
canvas_.drawBitmap(bm_, 0, 0,null);
㈣ android 可以在程序代码中设置style吗
可以,当然可以喽,可以在onCreate的时候就设置,setStyle() 无论换背景、颜色、字体什么的 首先要得到被换的component, 比如字体,假设他是TextView: 1、得到这个TextView component:TextView tv = (TextView)findViewById(R.id.tv);
㈤ Android开发中,如何给动态生成的Button指定Style样式
自定义样式方法,可以直接通过定义xml文件来实现不同的样式:
只需要修改button_style文件,同样三种状态分开定义:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<gradient android:startColor="#0d76e1" android:endColor="#0d76e1"
android:angle="270" />
<stroke android:width="1dip" android:color="#f403c9" />
<corners android:radius="2dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true">
<shape>
<gradient android:startColor="#ffc2b7" android:endColor="#ffc2b7"
android:angle="270" />
<stroke android:width="1dip" android:color="#f403c9" />
<corners android:radius="2dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient android:startColor="#000000" android:endColor="#ffffff"
android:angle="180" />
<stroke android:width="1dip" android:color="#f403c9" />
<corners android:radius="5dip" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
</item>
</selector>
gradient 主体渐变 startColor开始颜色,endColor结束颜色 ,angle开始渐变的角度(值只能为90的倍数,0时为左到右渐变,90时为下到上渐变,依次逆时针类推)
stroke 边框 width 边框宽度,color 边框颜色
corners 圆角 radius 半径,0为直角
padding text值的相对位置
㈥ 怎么用Android画一个正方形
先来介绍一下画几何图形要用到的,画布(Canvas)、画笔(Paint)。
1. 画一个圆使用的是drawCircle:canvas.drawCircle(cx, cy, radius, paint);x、y代表坐标、radius是半径、paint是画笔,就是画图的颜色;
2. 在画图的时候还要有注意,你所画的矩形是实心(paint.setStyle(Paint.Style.FILL))还是空心(paint.setStyle(Paint.Style.STROKE);
画图的时候还有一点,那就是消除锯齿:paint.setAntiAlias(true);
3. 还有就是设置一种渐变颜色的矩形:
Shader mShader = new LinearGradient(0,0,100,100, new int[]{Color.RED,Color.GREEn,Color.BLUE,Color.YELLO},null,Shader.TileMode.REPEAT);
ShapeDrawable sd;
//画一个实心正方形
sd = new ShapeDrawable(new RectShape());
sd.setBounds(20,20,100,100);
sd.draw(canvas);
//一个渐变色的正方形就完成了
4. 正方形:drawRect:canvas.drawRect(left, top, right, bottom, paint)
这里的left、top、right、bottom的值是:
left:是矩形距离左边的X轴
top:是矩形距离上边的Y轴
right:是矩形距离右边的X轴
bottom:是矩形距离下边的Y轴
5. 长方形:他和正方形是一个原理,这个就不用说了
6. 椭圆形:记住,这里的Rectf是float类型的
RectF re = new Rect(left, top, right, bottom);
canvas.drawOval(re,paint);
好了,说了这么多的的东西,那就让我们来看一下真正的实例吧!!!
package com.hades.game;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
public class CanvasActivity extends Activity {
/**
* 画一个几何图形
* hades
* 蓝色着衣
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView myView = new MyView(this);
setContentView(myView);
}
public class MyView extends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 设置画布的背景颜色
canvas.drawColor(Color.WHITE);
/**
* 定义矩形为空心
*/
// 定义画笔1
Paint paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
// 消除锯齿
paint.setAntiAlias(true);
// 设置画笔的颜色
paint.setColor(Color.RED);
// 设置paint的外框宽度
paint.setStrokeWidth(2);
// 画一个圆
canvas.drawCircle(40, 30, 20, paint);
// 画一个正放形
canvas.drawRect(20, 70, 70, 120, paint);
// 画一个长方形
canvas.drawRect(20, 170, 90, 130, paint);
// 画一个椭圆
RectF re = new RectF(20, 230, 100, 190);
canvas.drawOval(re, paint);
/**
* 定义矩形为实心
*/
paint.setStyle(Paint.Style.FILL);
// 定义画笔2
Paint paint2 = new Paint();
// 消除锯齿
paint2.setAntiAlias(true);
// 设置画笔的颜色
paint2.setColor(Color.BLUE);
// 画一个空心圆
canvas.drawCircle(150, 30, 20, paint2);
// 画一个正方形
canvas.drawRect(185, 70, 130, 120, paint2);
// 画一个长方形
canvas.drawRect(200, 130, 130, 180, paint2);
// 画一个椭圆形
RectF re2 = new RectF(200, 230, 130, 190);
canvas.drawOval(re2, paint2);
}
}
}
㈦ android里面如何填充矩形呢
方案:
在canvas上画矩形,然后设置画笔为实心就可以了。
代码示例:
paint.setStyle(Style.FILL);//实心矩形框
paint.setColor(Color.RED);//颜色为红色
canvas.drawRect(newRectF(10,10,300,100),paint);//画一个290*90的红色实心矩形
㈧ 如何改变在Android中删除线的颜色
I think this is not possible for simple textview so you have to do the following:-
1.Create a custom TextView by extending View class
2.Declare this custom textview inside XML layout same like we do for TextView.
And at last write an onDraw() method like following.
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(strikeThroughColor);
paint.setStyle(Paint.Style.FILL);
paint.setStrikeThruText(true);
paint.setStrokeWidth(strikeThroughWidth);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
super.onDraw(canvas);
float width = getWidth();
float heigh = getHeight();
canvas.drawLine(width/10, heigh/10, (width-width/10),(heigh-heigh/10), paint);
}
㈨ android中使用paint怎么画虚线
Paint paint = new Paint ( ) ;
paint.setColor ( Color.BLACK ) ;
//设置画直线格式
paint.setStyle ( Paint.Style.STROKE ) ;
//设置虚线效果
paint.setPathEffect ( new DashPathEffect ( new float [ ] { 3, 2 }, 0 ) ) ;
最后这句是设置虚线效果,里边的float数组的意思是:先画长度为3的实线,再间隔长度为2的空白,之后一直重复这个单元。这个数组的长度只要大于等于2就行,你可以设置多个数值,产生不同效果,最后这个0指的是与起始位置的偏移量。
㈩ 如何将J2ME上面的游戏改到Android上面
1. 平台比较
J2me:
开发平台
Android:
操作系统
2. 工程结构比较(源代码,资源文件夹,图片,数据)
J2me:
Res:资源文件
Src:源代码
Android:
Src:源代码
Res\drawable:图片
Res\raw:声音
Res\values:字符串
Assets:数据文件
3. 安装包比较
J2me:
Jad,jar
Android:
apk
4. 代码结构比较
J2me:
MIDlet,Canvas
Android:
Activity,View
都采用继承的方式,都只有一个MIDlet/Activity,一般都只有一个Canvas/View
5. 代码细节比较
l 全屏设置
J2me:
在Canvas类中调用SetFullScreenMode(Boolean)
Android:
在Activity类中调用
//设定全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
2 获得屏幕尺寸
J2me:
Canvas类的getHeight()和getWidth()方法
Android:
int screenWidth,screenHeight;
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
screenWidth = display.getWidth();
screenHeight = display.getHeight();
3 Display
J2me:
Display dis=Display.getDisplay(MIDlet);
Android:
Display display = windowManager.getDefaultDisplay();
4 画布类
J2me:
Canvas
Android:
继承View类,定义构造方法:
public MyView(Context context)
{
super(context);
}
5 屏幕绘制方法
J2me:
Paint(Graphics)
Android:
void onDraw(Canvas g)
6 Graphics
J2me:
Android:
7 Image的创建
J2me:
Image.createImage(path);
Android:
img = BitmapFactory.decodeResource(getResources(),R.drawable.map0);
8 Font的创建,Font使用,字体设置
J2me:
Android:
9 drawImage
J2me:
Android:
public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
多个重载
10 字符串绘制
J2me:
Android:
public native void drawText(String text, float x, float y, Paint paint);
多个重载
11 setClip
J2me:
Android:
public boolean clipRect(float left, float top, float right, float bottom,Region.Op op)
最后一个参数为:Region.Op.REPLACE
12旋转
J2me:
drawRegion()
drawImage()
Android:
还没找到好的方法,不过可以先创建一张翻转后的图片,再使用,封装好的代码如下:
//创建翻转图片
public Bitmap createTransImage(Bitmap img,int trans)
{
// Bitmap img;
try
{
// img = BitmapFactory.decodeResource(getResources(),sImg);
int width = img.getWidth();
int height = img.getHeight();
int newWidth = 200;
int newHeight = 200;
// calculate the scale - in this case = 0.4f
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
// createa matrix for the manipulation
Matrix matrix = new Matrix();
// resize the bit map
matrix.postScale(scaleWidth, scaleHeight);
// rotate the Bitmap
int degree=0;
Bitmap resizedBitmap=null;
int data[];
int buf;
switch(trans)
{
case ROTATE_HOR:
//创建镜像翻转
data=new int [img.getWidth()*img.getHeight()];
img.getPixels(data, 0, img.getWidth(), 0, 0, img.getWidth(),img.getHeight());
//交换数据
for(int i=0;i<img.getHeight();i++)
for(int j=0;j<img.getWidth()/2;j++)
{
buf=data[i*img.getWidth()+j];
data[i*img.getWidth()+j]=data[img.getWidth()*(i+1)-(j+1)];
data[img.getWidth()*(i+1)-(j+1)]=buf;
}
resizedBitmap=Bitmap.createBitmap(data, img.getWidth(),
img.getHeight(), Bitmap.Config.ARGB_4444);;
return resizedBitmap;
case ROTATE_VER:
//创建镜像翻转
data=new int [img.getWidth()*img.getHeight()];
img.getPixels(data, 0, img.getWidth(), 0, 0, img.getWidth(),img.getHeight());
//交换数据
for(int i=0;i<img.getHeight()/2;i++)
for(int j=0;j<img.getWidth();j++)
{
buf=data[i*img.getWidth()+j];
data[i*img.getWidth()+j]=data[(img.getHeight()-i-1)*img.getWidth()+j];
data[(img.getHeight()-i-1)*img.getWidth()+j]=buf;
}
resizedBitmap=Bitmap.createBitmap(data, img.getWidth(),
img.getHeight(), Bitmap.Config.ARGB_4444);;
return resizedBitmap;
case ROTATE_90:
matrix.postRotate(90);
// recreate the new Bitmap
resizedBitmap = Bitmap.createBitmap(img, 0, 0,
width, height, matrix, true);
return resizedBitmap;
case ROTATE_180:
matrix.postRotate(180);
// recreate the new Bitmap
resizedBitmap = Bitmap.createBitmap(img, 0, 0,
width, height, matrix, true);
return resizedBitmap;
case ROTATE_270:
matrix.postRotate(270);
// recreate the new Bitmap
resizedBitmap = Bitmap.createBitmap(img, 0, 0,
width, height, matrix, true);
return resizedBitmap;
}
return resizedBitmap;
}
catch (Exception e)
{
return null;
}
}
13 drawRect
J2me:
Android:
public void drawRect(float left, float top, float right, float bottom,Paint paint)
14 声音处理
J2me:
Android:
创建:
MediaPlayer coverSound =MediaPlayer.create(Activity,R.raw.back);
coverSound.prepare();
播放:
coverSound.start();
暂停:
coverSound.pause();
声音设置:
AudioManager vc = (AudioManager)Activity.getSystemService(Context.AUDIO_SERVICE);
vc.adjustVolume(AudioManager.ADJUST_LOWER, 1);
关闭:
coverSound.stop();
coverSound.release();
15 中断处理
J2me:
Android:
public void onWindowFocusChanged(boolean visibility)
16 填充屏幕
J2me:
Android:
CanvasInstance.drawColor(int color)
l7 按键处理
J2me:
Android:
要使按键可以被响应,需要在构造函数中调用
this.setFocusable(true);
处理方法:
public boolean onKeyDown(int keyCode, KeyEvent msg)
public boolean onKeyUp(int keyCode, KeyEvent msg)
18 触摸屏处理
J2me:
Android:
public boolean onTouchEvent(MotionEvent me)
{
if(me.getAction()==MotionEvent.ACTION_DOWN)
。。。。。。
else if(me.getAction()==MotionEvent.ACTION_UP)
。。。。。。
return true;
}
19 资源文件的的存放位置及读取
J2me:
Android:
图片:
Res\drawable:
声音:
Res\raw
数据:
Asserts
InputStream is=ActivityInstance.getAssets().open(path + ".dat");
20 屏幕刷新,
J2me:
repaint()
Android:
postInvalidate();
21 颜色的使用
J2me:
Android:
PaintInstance.setColor(0xAARRGGBB);
22 数据保存和读取
J2me:
Android:
保存:
SharedPreferences settings = ActivityInstance.getSharedPreferences(String name,int mode);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("hasRec", true);
。。。。。
editor.putInt("ex",enemy[i].i_X_abs);
editor.commit();
读取:
SharedPreferences settings = ActivityInstance.getSharedPreferences (String name,int mode);
this.curFaceDirection=settings.getInt("cd", 0);
23 填充方式
J2me:
Android:
paint.setStyle(Style.FILL);
paint.setStyle(Style.STROKE);
24锚点
J2me:
Android:
setTextAlign(Paint.Align.LEFT);
25 连接处理
J2me:
HttpConnection conn = (HttpConnection) Connector.open("www..com", Connector.READ, true);
conn.setRequestMethod("GET");
conn.setRequestProperty("accept", "**");
String location = conn.getRequestProperty("location");
int resCode = conn.getResponseCode();
InputStream stream = conn.getInputStream();
conn.disconnect();
总结了一下,有以下几点不同之处:
J2ME中的连接从Connector打开,Android中从URL对象打开
要设置连接是否可读写,J2ME中可以直接在Connector.Open时设置,而在Android中必须使用setDoInput(boolean)和setDoOutput(boolean)方法设置
在J2ME中可以在Connector.Open中对连接进行超时设置,在Android中使用setConnectTimeout(int)不仅可以对连接超时进行设置,还能设置超时时间,参数为0时忽略连接超时
在使用这些Api时,一定要注意每个参数的意义,比如j2me中drawRect的后两个参数为宽度和高度,而在Android中则变成了结束点的坐标,使用时千万不能想当然的随意传参。
对于Override方法的定义,一定别忘了super.的方式来进行回调。
上面基本上把J2ME和Android在2D游戏游戏开发中常用的API做了一个比较,了解这些内容后,基本上是可以比较容易地把ME的游戏游戏平顺地迁 移到Android平台。当然,此处只限制为游戏,如果你想把一款J2ME的软件迁移到Android平台,此方法并不适用,你需要学习android的 控件的使用