原文来自Coursera课程
Programming Mobile Applications for Android Handheld Systems: Part 2 - Week7 Graphics and Animation
链接:https://class.coursera.org/androidpart2-004/wiki/Week7_Overview
关于2D图形界面的绘制,主要有两种选择。一是绘制到View视图,另一个是绘制到Canvas画板。
绘制的对象,我们使用Drawable类来实现。Drawable的含义是可供绘制的事物,比如颜色、形状、图片。
实现的时候,有两种方法,可以通过XML,或者Java编程来实现。以下两个例子都是用于实现一个静态显示在屏幕中央的泡泡。
示例1:GraphicsBubbleXML
实现方法:
//BubbleActivity.java
public class BubbleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_centerInParent="true"
android:contentDescription="@string/bubble_desc"
android:src="@drawable/b128" />
</RelativeLayout>
泡泡的图片b128放置在res/drawable-nodpi目录下
示例2:GraphicsBubbleProgram
BubbleActivity.java
<pre class="java" name="code">public class BubbleActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取当前的Layout对象
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.frame);
//创建bubbleView对象,并将资源文件中的图片传入到对象中
ImageView bubbleView = new ImageView(getApplicationContext());
bubbleView.setImageDrawable(getResources().getDrawable(R.drawable.b128));
//设置BubbleView的高度和宽度
//这两个参数单独存放在res/values/dimen.xml文件中
int width = (int) getResources().getDimension(R.dimen.image_width);
int height = (int) getResources().getDimension(R.dimen.image_height);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);
params.addRule(RelativeLayout.CENTER_IN_PARENT);
//将参数传入bubbleView对象
bubbleView.setLayoutParams(params);
//使用Layout.addView()方法将bubbleView对象加入到Layout当中显示
relativeLayout.addView(bubbleView);
}
}
main.xml 布局文件就只需要定义最外围的Layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frame"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</RelativeLayout>
dimens.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">250dp</dimen>
<dimen name="image_height">250dp</dimen>
</resources>