120 likes | 318 Views
Android 使用访问图片. 创建 Drawable 对象. Android 在访问图片时,使用 Drawable 类及其子类 BitmapDrawable 、 ColorDrawable 、 ShapeDrawable 等类处理,关于 Drawable 类的初始化有三种方式,一是使用在工程中保存的图片;二是使用 mxl 定义 Drawable 属性;三是使用构造器来完成,但这种方法不经常被采纳。. 使用图片创建 Drawable 对象,在资源文件中保存一图片文件 test.jpg ,然后通过 R.drawable.test 使用该图片,代码如下:
E N D
创建Drawable对象 Android在访问图片时,使用Drawable类及其子类BitmapDrawable、ColorDrawable、ShapeDrawable等类处理,关于Drawable类的初始化有三种方式,一是使用在工程中保存的图片;二是使用mxl定义Drawable属性;三是使用构造器来完成,但这种方法不经常被采纳。 使用图片创建Drawable对象,在资源文件中保存一图片文件test.jpg,然后通过R.drawable.test使用该图片,代码如下: ImageView imgv = (ImageView)findViewById(R.id.imgv); imgv.setImageResource(R.drawable.test); 也可以使用xml文件定义Drawable对象 例如:在AndroidManifest.xml文件中定义应用的图标: <application android:icon=@drawable/icon......... 在布局文件中定义一个ImageView时指定Drawable对象 <ImageView android:id="@+id/imgv" android:layout_width="fill-parent" android:layout_height="wrap_content" android:src="@drawable/test" />
Bitmap和BitmapFactory 需要Bitmap和BitmapFactory两个类来读取文件 例如: public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Bitmap bm = BitmapFactory.decodeFile( getResources(),R.drawable.mybmp); ); ImageView iv = new ImageView(this); iv.setImageBitmap(bm); this.setContentView(iv); } }
动态图形绘制的基本思路是,创建一个View类或者SurfaceView类,重写onDraw()方法,使用Canvas对象在界面上绘制不同图形,使用invalidate()方法刷新界面。动态绘制图形的常见类有Canvas、Paint、Color、Path等。动态图形绘制的基本思路是,创建一个View类或者SurfaceView类,重写onDraw()方法,使用Canvas对象在界面上绘制不同图形,使用invalidate()方法刷新界面。动态绘制图形的常见类有Canvas、Paint、Color、Path等。
实验1:飞舞的小球,在这个例子中,通过自定义View,并继承View类,实验1:飞舞的小球,在这个例子中,通过自定义View,并继承View类, 通过多线程机制不断的绘制并刷新,实现小球飞舞的情景。如图所示
代码如下: • class MyView extends View implements Runnable { • // 图形当前坐标 • private int x = 20, y = 20; • //坐标控制开关 • boolean flagy = true; • boolean flagx = true; • // 构造方法 • public MyView(Context context, AttributeSet attrs) { • super(context, attrs); • // 获得焦点 • setFocusable(true); • // 启动线程 • new Thread(this).start(); • }
public void run() { • while(!Thread.currentThread().isInterrupted()){ • MyView.this.update(); • try { • Thread.sleep(10); • } catch (InterruptedException e) { • e.printStackTrace(); • } • } • } • @Override • protected void onDraw(Canvas canvas) { • super.onDraw(canvas); • // 实例化画笔 • Paint p = new Paint(); • // 设置画笔颜色 • p.setColor(Color.WHITE); • // 画圆 • canvas.drawCircle(x, y, 20, p); • MyView.this.postInvalidate(); • }
// 更新坐标 • private void update() { • int h = getHeight(); • int w = getWidth(); • if(x==w-20) flagx = false; • if(y==h-20) flagy = false; • if(x==20) flagx = true; • if(y==20) flagy=true; • if(flagy) y+=5; • if(!flagy) y-=5; • if(flagx) x+=5; • if(!flagx) x-=5; • } • } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView v = new MyView(this,null); setContentView(v); } }
使用Matrix实现旋转平移和缩放 在Android系统中Matrix类是一个矩阵,该类中有一个3*3的矩阵坐标,通过该类可以实现旋转、平移和缩放的综合应用。使用reset()方法初始化矩阵,使用setScale()设置缩放属性,setTranslate()设置平移属性,setRotate()设置旋转属性。 1 0 0 0.707 -0.707 0 0 1 0 --旋转45度后 0.707 0.707 0 0 0 1 0 0 1 平移到100,150后 1 0 100 0 1 150 0 0 1