zoukankan      html  css  js  c++  java
  • Graphics简单汇总

    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));启动的界面


    上图布局文件例如以下

    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


    <?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、


    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、


    <?

    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);
    		}
    	}
    }
    




  • 相关阅读:
    CI(CodeIgniter)框架介绍
    yii框架
    Jenkins简单使用介绍
    UNITY_INITIALIZE_OUTPUT宏
    UNITY地图寻路及服务器解决方案
    bloom
    Rigidbody中 Angular Drag (角阻力):
    Unity5 Shader Stripping 导致 LightMap 全部丢失的解决方法
    移动端播放视频文件
    UNITY5 为什么Inspector视图中脚本前面的勾选框没了
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7118231.html
Copyright © 2011-2022 走看看