1、主页面布局文件
activity_main.xml(仅仅有2个button按钮)
<?xml version="1.0" encoding="utf-8"? > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="testTuPian" android:text="測试图片处理" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="testDraw" android:text="測试绘制图形" /> </LinearLayout>
MainActivity.java(启动2个button)
package com.atguigu.l11_graphics; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void testTuPian(View view) { startActivity(new Intent(this, TuPianTestActivity.class)); } public void testDraw(View view) { startActivity(new Intent(this, DrawTestActivity.class)); } }
2、startActivity(new Intent(this, TuPianTestActivity.class));启动的界面
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
上图布局文件例如以下
activity_tupian_test.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick=<span style="color:#ff0000;">"testBD"</span> android:text="測试Bitmap" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="<span style="color:#ff0000;">testMatrix</span>" android:text="測试图片的缩放等处理" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="使用Shape做的button" android:background="@drawable/shape_test"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:background="@drawable/image_selector" android:onClick="<span style="color:#ff0000;">clickIV</span>"/> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="使用Selector+Shape做的button" android:background="@drawable/shape_selector"/> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/test2" android:text="A NinePatchDrawable graphic is a stretchable bitmap image, which Android will automatically resize to accommodate the contents of the View in which you have placed it as the background. A NinePatch drawable is a standard PNG image that includes an extra" /> </LinearLayout>
TuPianTestActivity.java
package com.atguigu.l11_graphics; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Toast; /* * 測试操作图片的Activity */ public class TuPianTestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tupian_test); } public void<span style="color:#ff0000;"> testBD</span>(View v) { startActivity(new Intent(this, BitmapTestActivity.class)); } public void <span style="color:#ff0000;">testMatrix</span>(View v) { startActivity(new Intent(this, MatrixTestActivity.class)); } public void <span style="color:#ff0000;">clickIV</span>(View v) { Toast.makeText(this, "点击了selector", 0).show(); } }
3、将上图分开来看(从上到下依次展示布局文件或者代码)
3-1、activity_bitmap.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="保存图片" android:onClick="saveImage"/> <ImageView android:id="@+id/iv_bitmap1" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/iv_bitmap2" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/iv_bitmap3" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
BitmapTestActivity.java
package com.atguigu.l11_graphics; import java.io.FileNotFoundException; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.widget.ImageView; /* Bitmap: 载入一张图片数据到内存中, 都能够封装成一个Bitmap对象 需求3: 将一个bitmap对象保存到存储空间中 */ public class BitmapTestActivity extends Activity { private ImageView iv_bitmap1; private ImageView iv_bitmap2; private ImageView iv_bitmap3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_bitmap); iv_bitmap1 = (ImageView) findViewById(R.id.iv_bitmap1); iv_bitmap2 = (ImageView) findViewById(R.id.iv_bitmap2); iv_bitmap3 = (ImageView) findViewById(R.id.iv_bitmap3); //1: 载入资源文件里的图片资源并显示 iv_bitmap1.setImageResource(R.drawable.ic_launcher); //2: 使用bitmapfactory做--载入资源图片 Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher); iv_bitmap2.setImageBitmap(bitmap); //载入存储空间的图片 Bitmap bitmap2 = BitmapFactory.decodeFile("/storage/sdcard/atguigu.png"); iv_bitmap3.setImageBitmap(bitmap2); } /** * 讲bitmap对象保存到存储空间去 * /data/data/包名/files/save.png */ public void saveImage(View v) { Bitmap bitmap = BitmapFactory.decodeFile("/storage/sdcard/atguigu.png"); try { bitmap.compress(CompressFormat.PNG, 100,openFileOutput("save.png", Context.MODE_PRIVATE)); } catch (FileNotFoundException e) { e.printStackTrace(); } } }
3-2、activity_matrix.xml
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="50dip" android:orientation="horizontal" > <EditText android:id="@+id/et_matrix_scale" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="0.25" /> <EditText android:id="@+id/et_matrix_rotate" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="30" /> <EditText android:id="@+id/et_matrix_translateX" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="10" /> <EditText android:id="@+id/et_matrix_translateY" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:text="10" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="50dip" android:orientation="horizontal" > <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:onClick="scaleBitmap" android:text="缩放" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:onClick="rotateBitmap" android:text="旋转" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:onClick="translateBitmap" android:text="移动" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0" android:onClick="clearMatrix" android:text="还原" /> </LinearLayout> <ImageView android:id="@+id/iv_matrix_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" android:scaleType="matrix"/> </LinearLayout>
MatrixTestActivity.java
package com.atguigu.l11_graphics; import android.app.Activity; import android.graphics.Matrix; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.ImageView; /* Matrix 。中文里叫矩阵。高等数学里有介绍。在图像处理方面,主要是用于平面的缩放、平移、旋转等操作 */ public class MatrixTestActivity extends Activity { private EditText et_matrix_scale; private EditText et_matrix_rotate; private EditText et_matrix_translateX; private EditText et_matrix_translateY; private ImageView iv_matrix_icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_matrix); et_matrix_scale = (EditText) findViewById(R.id.et_matrix_scale); et_matrix_rotate = (EditText) findViewById(R.id.et_matrix_rotate); et_matrix_translateX = (EditText) findViewById(R.id.et_matrix_translateX); et_matrix_translateY = (EditText) findViewById(R.id.et_matrix_translateY); iv_matrix_icon = (ImageView) findViewById(R.id.iv_matrix_icon); } /** * 缩放图片 */ Matrix matrix = new Matrix(); public void scaleBitmap(View view) { // 得到缩放比例--float类型 float sacle = Float.parseFloat(et_matrix_scale.getText().toString()); // 对缩放图片对象设置xy轴缩放比例 matrix.postScale(sacle, sacle); iv_matrix_icon.setImageMatrix(matrix); } /** * 旋转图片 */ public void rotateBitmap(View view) { float degrees = Float.parseFloat(et_matrix_rotate.getText().toString()); matrix.postRotate(degrees); iv_matrix_icon.setImageMatrix(matrix); } /** * 移动图片 */ public void translateBitmap(View view) { float dx = Float.parseFloat(et_matrix_translateX.getText().toString()); float dy = Float.parseFloat(et_matrix_translateY.getText().toString()); matrix.postTranslate(dx, dy); iv_matrix_icon.setImageMatrix(matrix); } /** * 还原操作 */ public void clearMatrix(View view) { //清除数据 matrix.reset(); iv_matrix_icon.setImageMatrix(matrix); } }
MatrixTestActivity.java
package com.atguigu.l11_graphics; import android.app.Activity; import android.graphics.Matrix; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.ImageView; /* Matrix ,中文里叫矩阵。高等数学里有介绍。在图像处理方面,主要是用于平面的缩放、平移、旋转等操作 */ public class MatrixTestActivity extends Activity { private EditText et_matrix_scale; private EditText et_matrix_rotate; private EditText et_matrix_translateX; private EditText et_matrix_translateY; private ImageView iv_matrix_icon; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_matrix); et_matrix_scale = (EditText) findViewById(R.id.et_matrix_scale); et_matrix_rotate = (EditText) findViewById(R.id.et_matrix_rotate); et_matrix_translateX = (EditText) findViewById(R.id.et_matrix_translateX); et_matrix_translateY = (EditText) findViewById(R.id.et_matrix_translateY); iv_matrix_icon = (ImageView) findViewById(R.id.iv_matrix_icon); } /** * 缩放图片 */ Matrix matrix = new Matrix(); public void scaleBitmap(View view) { // 得到缩放比例--float类型 float sacle = Float.parseFloat(et_matrix_scale.getText().toString()); // 对缩放图片对象设置xy轴缩放比例 matrix.postScale(sacle, sacle); iv_matrix_icon.setImageMatrix(matrix); } /** * 旋转图片 */ public void rotateBitmap(View view) { float degrees = Float.parseFloat(et_matrix_rotate.getText().toString()); matrix.postRotate(degrees); iv_matrix_icon.setImageMatrix(matrix); } /** * 移动图片 */ public void translateBitmap(View view) { float dx = Float.parseFloat(et_matrix_translateX.getText().toString()); float dy = Float.parseFloat(et_matrix_translateY.getText().toString()); matrix.postTranslate(dx, dy); iv_matrix_icon.setImageMatrix(matrix); } /** * 还原操作 */ public void clearMatrix(View view) { //清除数据 matrix.reset(); iv_matrix_icon.setImageMatrix(matrix); } }
3-3、
shape_test.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 半径大小 --> <corners android:radius="10dp" /> <!-- 边框 --> <stroke android:dashGap="2dp" android:dashWidth="2dp" android:width="3dp" android:color="#FF7F00" /> <size android:height="50dp" android:width="40dp" /> <!-- 颜色 --> <solid android:color="#FFD700"></solid> <!-- 覆盖solid --> <gradient android:startColor="#ffffff" android:centerColor="#EE4000" android:endColor="#ffffff" android:angle="90"/> </shape>
3-4、
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
image_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 特别的状态放在前面 --> <item android:drawable="@drawable/main_index_search_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/main_index_search_normal"/> </selector>
3-5、
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzIxMDYyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
<? xml version="1.0" encoding="utf-8"? > <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true"> <shape> <corners android:radius="4dp"></corners> <stroke android:width="2dp" android:color="#EEAD0E" android:dashWidth="4dp" android:dashGap="2dp"></stroke> <size android:height="40dp"></size> <gradient android:startColor="#ffffff" android:centerColor="#ffffff" android:endColor="#E0FFFF"/> </shape> </item> <item> <shape> <corners android:radius="2dp"></corners> <stroke android:width="2dp" android:color="#EE7AE9"></stroke> <size android:height="40dp"></size> <solid android:color="#E0FFFF"></solid> </shape> </item> </selector>
3-6、(9patch图片)
4、startActivity(new Intent(this, DrawTestActivity.class));启动以下图片
DrawTestActivity.java
package com.atguigu.l11_graphics; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.OvalShape; import android.os.Bundle; import android.view.View; public class DrawTestActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 显示自己定义视图 setContentView(new MyView(this)); } /** * 自己定义myview视图 */ private class MyView extends View { //成员变量---可画的图形对象 private ShapeDrawable shapeDrawable; public MyView(Context context) { super(context); // 初始化一个图形对象---參数是椭圆 shapeDrawable = new ShapeDrawable(new OvalShape()); // 通过椭圆得到画笔,通过画笔设置颜色 shapeDrawable.getPaint().setColor(Color.RED); // 指定位置left top right bottom shapeDrawable.setBounds(10, 10, 200, 100); } // 显示界面视图效果 画布 @Override protected void onDraw(Canvas canvas) { //设置画布的颜色 canvas.drawColor(Color.GREEN); // 将图像画到画布上 shapeDrawable.draw(canvas); //指定画笔 Paint paint = new Paint(); //通过画笔设置颜色 paint.setColor(Color.BLUE); //设置字体大小 paint.setTextSize(30); //设置平滑度 paint.setAntiAlias(true); //在画布上写上字体 canvas.drawText("你好", 10, 200, paint); } } }