习惯了使用java里的graphics类来绘制图形及图片,编写android的对图形及图片的绘制使用起来一直不太顺手。
下面我来小结一下目前使用过的android中画图片的方法
一、使用控件的setImageResource方法
1.在main.xml文件中写一个ImageView(TestView也能行,感觉只要是继承自View类的话都可以实现,但是没有逐个 去检验) 或者ImageButton等控件如下:
<LineLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/board"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></ImageView>
<ImageButton
android:id="@+id/piece"
android:layout_width="20px"
android:layout_height="20px"></ImageButton>
</LineLayout>
2.将图片文件
piece.jpg和board.jpg放在res.drawable 文件夹下(drawable-hdpi,drawable-mdpi, drawable-ldpi,分别表示高像素,中像素,低像素的图片),暂且放在drawable-hdpi下吧。
3.接着将src下的main.java修改如下
public class main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 通过findViewById获得ImageView
board = (ImageView) findViewById(R.id.board);
// 为ImageView设置图片资源
board.setImageResource(R.drawable.board);
// 通过findViewById获得ImageButton
piece = (ImageButton) findViewById(R.id.piece);
// 为ImageButton设置图片资源
piece.setImageResource(R.drawable.piece);
}
// 图片视图ImageView
private ImageView board;
private ImageButton piece;
}
4.运行android application 结果如附件中imagtest1.jpg所示。
二、使用View类的onDraw(Canvas canvas)方法和invalidate()实现在棋盘上画棋子
个人感觉如同如java中Panel的paint方法在Panel第一次显示的时候调用绘制Panel,repaint则是提供给程序员手动调用paint方法。
android中View类的onDraw方法,也是在View第一次显示的时候调用绘制View,invalidate()也是提供给程序员手动调用onDraw方法。
具体实现方法如下:(本例承接上个一例子,修改了部分代码)
1.新建一个ImageViewSelf.java 继承自ImageView
public class ImageViewSelf extends ImageView {
//实例化一个paint对象,其可以设置canvas绘制图形的颜色等属性
Paint paint = new Paint();
//获得piece.jpg图片的资源,创建Bitmap对象
private Bitmap bitmap;
//以下三个构造方法本人暂时不懂啥意思
public ImageViewSelf(Context context) {
super(context);
}
public ImageViewSelf(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ImageViewSelf(Context context, AttributeSet attrs) {
super(context, attrs);
}
//设置bitmap的图片资源
public void initImage(){
bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.piece));
}
//重写onDraw方法
public void onDraw(Canvas canvas)
{
//执行父类的onDraw方法
super.onDraw(canvas);
if(bitmap!=null){
//在150,150坐标处画图bitmap图形
canvas.drawBitmap(bitmap, 150, 150, paint);
}
}
}
2.修改main中的ImageView为ImageViewself.test.ImageViewSelf
<Imagetest.test.ImageViewSelf
android:id="@+id/board"
android:layout_width="fill_parent"
android:layout_height="wrap_content"></Imagetest.test.ImageViewSelf>
3.修改main.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 通过findViewById获得ImageView
board = (ImageViewSelf) findViewById(R.id.board);
// 为ImageView设置图片资源
board.setImageResource(R.drawable.board);
// 通过findViewById获得ImageButton
piece = (ImageButton) findViewById(R.id.piece);
// 为ImageButton设置图片资源
piece.setImageResource(R.drawable.piece);
//添加监听器
piece.setOnClickListener(cl);
}
// 实例化一个按键监听器
private Button.OnClickListener cl = new Button.OnClickListener() {
public void onClick(View v) {
//调用intitImage方法,设置图片资源
board.initImage();
//刷新board,手动调用onDraw
board.invalidate();
}
};
// 图片视图ImageView
private ImageViewSelf board;
private ImageButton piece;
}
4.修改完毕后,运行程序,开始棋盘上是没有棋子的,点击按钮后,执行initImage()和invalidata()方法后,期盼上会出现一个棋子。
程序运行结果如附件中imagetest2.jpg
paint类可以设置画笔的颜色等参数,canvas中提供了各种画图形的方法,如画图片、圆形、矩形等
以上两个类结合起来使用也就相当于java的Graphics。
android画图的例子也就完成了!
第一个例子的全部代码及文件在imagetest压缩文件中
第二个例子的全部代码及文件在imagetest2压缩文件中
未解决问题:
1.使用语句bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.piece));得到的图像大小比真实稍小。 ??
2.ImageViewSelf中构造方法中各参数的含义。 ??
续:关于之前所提到的第一个问题:可以使用Rect 来控制绘画图片的大小。
使用 canvas.
drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint)
其第一个Rect src 是所需要绘制的bitmap图片的区域,需要注意rect的构造方法中四个参数为左坐标,上坐标,右坐标及下坐标。
并不是java所习惯的左坐标,上坐标,宽度及高度。
第二个Rect dst 表示的是在view中的哪个区域绘制图片。
例:
Rect src = new Rect(0, 0,35,35);
Rect dst = new Rect(50,50, 90,90);
canvas.drawBitmap(cursor,src,dst,paint);
以上代码表示在view中的dst区域内,绘制bitmap对象cursor的0,0,35,35的图像。
两个Rect大小不一致是没有关系的,绘制时会自动填充。
- 大小: 82.5 KB
- 大小: 83.9 KB
分享到:
相关推荐
Android 动画实现几种方案 在 Android 的 FrameWork 中,为我们提供三种动画的实现方式:逐帧(Frame)动画、视图/补间动画(View Animation)和属性动画(Property Animation)。由于,这三种动画的实现方式和针对...
Android 安卓生成4种图片动画效果,可用于画廊、画册、图库壁纸、相框应用中,这几种渐变分别是图片渐变(淡入淡出)Alpha透明度变化、图片拉伸由大到小Scale、图片移位Translate、图片旋转Rotate如演示截图所示,...
Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途 一、Activity截屏 1、截Activity界面(包含空白的状态栏) /** * 根据指定的Activity截图(带空白...
下面几种设置动画: ViewPropertyAnimator animateText = findViewById(R.id.simple_anim_text) .animate() .setDuration(5000) .scaleXBy(.5f); Quicksand.trap(KEY_SIMPLE_ANIMATE_TEXT, animateText);
大家在使用APP的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法: 第一种:使用动画的方法实现:(代码繁琐) 这种发放需要:两个动画效果,一个布局,...
Android中实现圆角图片有多种姿势,不知你解锁了几种? 方法一:setXfermode法 此种方式就是再new一个相同尺寸的bitmap,然后使用paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));先画圆角矩形,再画原始...
另外说到动画,在Android里面支持3种动画: 逐帧动画(Frame Animation)、补间动画(Tween Animation)和属性动画(Property Animation),至于这几种动画的区别这里不再介绍,希望开发者都能在使用的过程中体会两者的...
Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的...
下面我们将一一介绍这几种思路的实现过程。 1.自定义View实现咻一咻 那么这种实现方法需要掌握Canvas以及Paint几乎所有的方法。其对程序员的专业知识要求极高。 用该种方式实现的优点有: ㈠这种是最复杂的实现方法...
通过对Touch事件的几种状态处理完成照片的放大,缩小、拖拽等功能
因为一个Android项目的缘故要在软件打开界面轮流显示两张照片,不想让两张图片替换的太生硬,所以让其中一张图片渐隐,逐渐显示第二张图片。...本文重点介绍这一种方法。(在view中绘画) 第三种: 前两种都
在Android里可以逐帧的播放图片,然后产生一种动态的效果,准备好几张连续的图片,然后在于源程序res文件夹下建立anim文件夹,然后新建一个XML XML代码如下: <?xml version=1.0 encoding=utf-8?> ...
开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、...
另一种Frame动画,传统的动画方法,通过顺序的播放排列好的图片来实现,类似电影. 6. 什么是嵌入式实时操作系统,Android操作系统属于实时操作系统吗? 嵌入式实时操作系统是指当外界事件或数据产生时,能够接受并以足够...
因为我想在ViewPager实现图片放大缩小的动画,但是ViewPager几个页面的动画会一起动,而且放大全屏图片的话会相互覆盖,很诡异。于是上网搜demo,一无所获。迫于无奈。。。 废话不多说,直接贴代码。 1.配置文件...
多达十几种界面刷新样式,下拉刷新动画,上拉数据加载动画 下拉特效,弹力恢复等 内有图片展示
Android 一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导开发 IOS 由苹果公司开发的移动操作系统 Webkit 一个开源的浏览器引擎,在手机上的...
本文手把手教你图片->SVG->Path的姿势.。 ...所以内置了几种将别的资源->Path的方法: 直接传string。(A-Z,0-9 “.” “- ” “) //根据String 转化成Path setSourcePath(PathParserUtils.