近期Android 基础复习用 简单小练习

AndroidManifest.xml  文件内容:

<?xml version="1.0" encoding="utf-8"?>
    package="com.zxl.myapplication">

            android:allowBackup="true"
        android:icon="@drawable/ajax"
        android:label="@string/app_name"
        android:roundIcon="@drawable/ajax"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
       
       
       
       
       
       
       
       
       
       
       
       
           
               

               
           
       
       
       
   

********************************************************************************************************************

Java  src 文件夹中的文件

一、CodeView.java  文件

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;


public class CodeView extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        //创建一个线性布局管理器
        LinearLayout layout=new LinearLayout(this);
        layout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        layout.setOrientation(LinearLayout.VERTICAL);
        //设置该Activity显示layout
        super.setContentView(layout);


        //创建一个TextView
        final TextView show=new TextView(this);
        show.setMinWidth(300);
        show.setMinHeight(80);
        //创建一个button
        Button bn = new Button(this);
        bn.setText("OK");
        bn.setMinWidth(120);
        bn.setMinHeight(60);
        bn.setBackgroundColor(Color.BLUE);
        show.setBackgroundColor(Color.RED);
        //向Layout容器中添加textview
        layout.addView(show);
        layout.addView(bn);
        //向layout容器中添加按钮
        bn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                show.setText("Hello,Android"+new java.util.Date());
            }
        });
        DrawVIew drawVIew=new DrawVIew(this);
        drawVIew.setBackgroundColor(Color.GREEN);
        layout.addView(drawVIew);

    }

}
********************************************************************************************************************

二、DrawVIew.java文件

package com.zxl.myapplication.viewmake;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


public class DrawVIew extends View {

    public float currentX=40;
    public float currentY=50;

    Paint paint=new Paint();


    public DrawVIew(Context context) {
        super(context);
        System.out.println("02 DrawVIew--------");
    }

    public DrawVIew(Context context, AttributeSet set){

        super(context,set);
        System.out.println("01 DrawVIew--------");
    }

    @Override
    protected void onDraw(Canvas canvas) {
        System.out.println("onDraw--------");

        paint.setColor(Color.RED);
        canvas.drawCircle(currentX,currentY,15,paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        currentX=event.getX();
        currentY=event.getY();
        System.out.println("onTouchEvent--------"+currentY+"currenty="+currentY);
        invalidate();
        return true;
    }
}
********************************************************************************************************************

三、GridLayoutTest.java  文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.Button;
import android.widget.GridLayout;

import com.zxl.myapplication.R;

public class GridLayoutTest extends Activity {
    GridLayout gridLayout;
    String[] chars=new String[]{
            "7","8","9","÷",
            "4","5","6","×",
            "1","2","3","-",
            ".","0","=","+"

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid_layout_test);

        gridLayout=findViewById(R.id.root1);
        for (int i=0;i             Button btn=new Button(this);
            btn.setText(chars[i]);
            btn.setTextSize(40);
            GridLayout.Spec rowSpec=GridLayout.spec(i/4+2);
            GridLayout.Spec columSpec=GridLayout.spec(i%4);
            GridLayout.LayoutParams params=new GridLayout.LayoutParams(rowSpec,columSpec);
            params.setGravity(Gravity.FILL);
            gridLayout.addView(btn,params);
        }

    }
}

-------------------------------------------------------------

R.layout.activity_grid_layout_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.GridLayoutTest"
    android:rowCount="6"
    android:columnCount="4"
    android:layout_marginTop="20dp"
    android:layout_marginBottom="340dp"
    android:id="@+id/root1">
            android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:textSize="50sp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:padding="5dp"
        android:layout_gravity="right"
        android:background="#000"
        android:text="0"
        />
            android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_columnSpan="4"
        android:text="清除"/>


********************************************************************************************************************

四、ImageSwitcherTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.ViewSwitcher;

import com.zxl.myapplication.R;

import java.nio.InvalidMarkException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ImageSwitcherTest extends Activity {

    int[] imageIds=new int[]{
            R.drawable.ee, R.drawable.classic, R.drawable.java,
            R.drawable.ajax,R.drawable.ee,R.drawable.classic,
            R.drawable.java,R.drawable.ajax,R.drawable.java,
            R.drawable.ee,R.drawable.classic,R.drawable.classic
    };
    ImageSwitcher switcher;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_image_switcher_test);
        //创建一个LIst对象,List对象的元素是map
        List> listItems=new ArrayList>();
        for (int i=0;i             Map listItem=new HashMap();
            listItem.put("image",imageIds[i]);
            listItems.add(listItem);
        }
        switcher=findViewById(R.id.switcher);
        switcher.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView=new ImageView(ImageSwitcherTest.this);
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(
                        ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT
                ));
                return imageView;
            }
        });
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,
                listItems,
                R.layout.cell,
                new String[]{"image"},
                new int[]{R.id.image1});
        GridView gridView=findViewById(R.id.grid01);
        gridView.setAdapter(simpleAdapter);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                switcher.setImageResource(imageIds[i]);
            }
        });

    }
}

------------------------------------------

R.layout.activity_image_switcher_test.xml 文件

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.ImageSwitcherTest"
    android:orientation="vertical"
    android:gravity="center_horizontal">
   
            android:id="@+id/grid01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:horizontalSpacing="1pt"
        android:verticalSpacing="2pt"
        android:numColumns="4"
        android:gravity="center">

   
            android:id="@+id/switcher"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_gravity="center_horizontal"
        android:inAnimation="@android:anim/fade_in"
        android:outAnimation="@android:anim/fade_out">

   

********************************************************************************************************************

五、MixView.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.zxl.myapplication.R;
import com.zxl.specialimage.HandDraw;
import com.zxl.specialimage.MatrixActivity;
import com.zxl.specialimage.MoveBack;
import com.zxl.specialimage.PinBall;

public class MixView extends Activity {

    int[] images=new int[]{
            R.drawable.java,
            R.drawable.ee,
            R.drawable.classic,
            R.drawable.ajax
    };
    int currentIMg=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //获取LinearLayout 布局容器
        LinearLayout main=findViewById(R.id.root);

        final ImageView image=new ImageView(this);
        main.addView(image);
        image.setImageResource(images[0]);
        image.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                image.setImageResource(images[++currentIMg%images.length]);
            }
        });

        final LinearLayout layout1=new LinearLayout(this);
        layout1.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout1.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout1);
        final Button bn=new Button(this);
        layout1.addView(bn);
        bn.setHeight(45);
        bn.setWidth(100);
        bn.setMaxWidth(120);
        bn.setText("点点图片看");
        bn.setTextSize(14);
        bn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,CodeView.class);
                startActivity(intent);

            }
        });
        final Button bn2=new Button(this);
        layout1.addView(bn2);
        bn2.setHeight(45);
        bn2.setWidth(100);
        bn2.setMaxWidth(120);
        bn2.setText("打开彩虹框");
        bn2.setTextSize(14);
        bn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,NiHongDengTest.class);
                startActivity(intent);

            }
        });

        final Button bn3=new Button(this);
        layout1.addView(bn3);
        bn3.setHeight(45);
        bn3.setWidth(80);
        bn3.setMaxWidth(200);
        bn3.setText("打开计算器界面布局");
        bn3.setTextSize(14);
        bn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,GridLayoutTest.class);
                startActivity(intent);

            }
        });

        final LinearLayout layout2=new LinearLayout(this);
        layout2.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout2.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout2);

        final Button bn4=new Button(this);
        layout2.addView(bn4);
        bn4.setHeight(45);
        bn4.setWidth(200);
        bn4.setMaxWidth(200);
        bn4.setText("StackView  浏览图片");
        bn4.setTextSize(14);
        bn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,StackViewTest.class);
                startActivity(intent);

            }
        });

        final Button bn5=new Button(this);
        layout2.addView(bn5);
        bn5.setHeight(45);
        bn5.setText("ProgressbarTest 各种进度条");
        bn5.setTextSize(14);
        bn5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,ProgressbarTest.class);
                startActivity(intent);

            }
        });

        final LinearLayout layout3=new LinearLayout(this);
        layout3.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout3.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout3);

        final Button bn6=new Button(this);
        layout3.addView(bn6);
        bn6.setHeight(45);
        bn6.setText("SeekBarTest 滑动条");
        bn6.setTextSize(14);
        bn6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,SeekBarTest.class);
                startActivity(intent);

            }
        });
        final Button bn7=new Button(this);
        layout3.addView(bn7);
        bn7.setHeight(45);
        bn7.setText("ViewSwitcherTest 仿安卓启动界面");
        bn7.setTextSize(14);
        bn7.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,ViewSwitcherTest.class);
                startActivity(intent);

            }
        });

        final LinearLayout layout4=new LinearLayout(this);
        layout4.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout4.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout4);

        final Button bn8=new Button(this);
        layout4.addView(bn8);
        bn8.setHeight(45);
        bn8.setText("ViewSwitcherTest 仿安卓启动界面");
        bn8.setTextSize(14);
        bn8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,ImageSwitcherTest.class);
                startActivity(intent);

            }
        });
        final Button bn9=new Button(this);
        layout4.addView(bn9);
        bn9.setHeight(45);
        bn9.setText("ViewFlipperTest 浏览图片淡入淡出显示");
        bn9.setTextSize(14);
        bn9.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,ViewFlipperTest.class);
                startActivity(intent);

            }
        });

        final LinearLayout layout5=new LinearLayout(this);
        layout5.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout5.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout5);

        final Button bn10=new Button(this);
        layout5.addView(bn10);
        bn10.setHeight(45);
        bn10.setText("Handraw 版本不合适,菜单选项无法出来");
        bn10.setTextSize(14);
        bn10.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this, HandDraw.class);
                startActivity(intent);
            }
        });

        final Button bn11=new Button(this);
        layout5.addView(bn11);
        bn11.setHeight(45);
        bn11.setText("乒乓球 可按AD键");
        bn11.setTextSize(14);
        bn11.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this, PinBall.class);
                startActivity(intent);
            }
        });

        final LinearLayout layout6=new LinearLayout(this);
        layout6.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        layout6.setOrientation(LinearLayout.HORIZONTAL);
        main.addView(layout6);

        final Button bn12=new Button(this);
        layout6.addView(bn12);
        bn12.setHeight(45);
        bn12.setText("飞机移动");
        bn12.setTextSize(14);
        bn12.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(MixView.this,MoveBack.class);
                startActivity(intent);

            }
        });


    }
}

-------------------------------------------------

R.layout.activity_main2.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/root"
    tools:context=".viewmake.MixView">

********************************************************************************************************************

六、NiHongDengTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.zxl.myapplication.R;

import java.util.Timer;
import java.util.TimerTask;

public class NiHongDengTest extends Activity {

    private int currentColor=0;
    final int[] colors=new int[]{
            R.color.red,
            R.color.chengse,
            R.color.yellow,
            R.color.green,
            R.color.qing,
            R.color.blue,
            R.color.zi
    };
    final int[] names=new int[]{
            R.id.view01,
            R.id.view02,
            R.id.view03,
            R.id.view04,
            R.id.view05,
            R.id.view06,
            R.id.view07
    };
    TextView[] views=new TextView[names.length];
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {

            if(msg.what==123){
                for(int i=0;i                     views[i].setBackgroundResource(colors[(i+currentColor)%names.length]);
                }
                currentColor++;
            }
            super.handleMessage(msg);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ni_hong_deng_test);
        for(int i=0;i             views[i]=findViewById(names[i]);
        }
        new Timer().schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(123);
            }
        },0,200);

    }
}

-------------------------------------------------------

R.layout.activity_ni_hong_deng_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
            android:id="@+id/view01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="320dp"
        android:height="320dp"
        android:background="#f00"/>
            android:id="@+id/view02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="280dp"
        android:height="280dp"
        android:background="#0f0"/>
            android:id="@+id/view03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="240dp"
        android:height="240dp"
        android:background="#00f"/>
            android:id="@+id/view04"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="200dp"
        android:height="200dp"
        android:background="#ff0"/>
            android:id="@+id/view05"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="160dp"
        android:height="160dp"
        android:background="#f0f"/>
            android:id="@+id/view06"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="120dp"
        android:height="120dp"
        android:background="#491"/>

            android:id="@+id/view07"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:width="120dp"
        android:height="120dp"
        android:background="#187"/>


********************************************************************************************************************

七、ProgressbarTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;

import com.zxl.myapplication.R;

public class ProgressbarTest extends Activity {

    //改程序模拟填充长度为100的数组
    private int[] data=new int[100];
    int hasData=0;
    //记录ProgressBar 的完成进度
    int status=0;
    ProgressBar bar,bar2;
    //创建一个负责更新的进度的Handler
    Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //表明该消息是由该程序发送的
            if(msg.what==0x111){
                bar.setProgress(status);
                bar2.setProgress(status);
            }
            super.handleMessage(msg);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置窗口特征,启用显示进度的进度条
        requestWindowFeature(Window.FEATURE_PROGRESS);
        //设置窗口特征,启用不显示进度的进度条
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

        setContentView(R.layout.activity_progressbar_test);

        Button bn1=findViewById(R.id.bn1);
        Button bn2=findViewById(R.id.bn2);
        bn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setProgressBarIndeterminateVisibility(true);
                setProgressBarVisibility(true);
                setProgress(4500);
            }
        });
        bn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setProgressBarIndeterminateVisibility(false);
                setProgressBarVisibility(false);
            }
        });
        bar=findViewById(R.id.bar);
        bar2=findViewById(R.id.bar2);

        //启动线程来执行任务
        new Thread(){
            @Override
            public void run() {
                while (status<100){
                    //获取耗时操作的完成百分比
                    status=doWork();
                    mHandler.sendEmptyMessage(0x111);
                }
                super.run();
            }
        }.start();
    }
    //模拟一个耗时任务
    public int doWork(){
        data[hasData++]= (int) (Math.random()*100);
        try {
            Thread.sleep(100);
        }catch (Exception e){
            e.printStackTrace();
        }
        return hasData;
    }
}

---------------------------------------------------

R.layout.activity_progressbar_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.ProgressbarTest"
    android:orientation="vertical">
            android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
                    android:id="@+id/bn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="显示"/>
                    android:id="@+id/bn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="隐藏"/>

   
            android:layout_width="match_parent"
        android:layout_height="wrap_content">
       
                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/Widget.ProgressBar.Large"/>
       
                    android:layout_width="75dp"
            android:layout_height="wrap_content" />
       
                    style="@android:style/Widget.ProgressBar.Small"
            android:layout_width="52dp"
            android:layout_height="34dp" />

   

            android:layout_width="match_parent"
        android:layout_height="52dp"
        android:text="任务完成的进度" />
   
            android:id="@+id/bar"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="42dp"
        android:max="100"
        android:layout_marginBottom="20dp"/>
   
            android:id="@+id/bar2"
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="164dp"
        android:max="100"
        android:progressDrawable="@drawable/my_bar" />

********************************************************************************************************************

八、SeekBarTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.SeekBar;

import com.zxl.myapplication.R;

public class SeekBarTest extends Activity {

    ImageView imageView,imageView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seek_bar_test);
        imageView=findViewById(R.id.image);
        imageView2=findViewById(R.id.image2);
        SeekBar seekBar=findViewById(R.id.seekBar);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                imageView.setAlpha(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        RatingBar ratingBar=findViewById(R.id.ratingBar);
        ratingBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                imageView2.setAlpha((int) (v * 255 / 5));
            }
        });
    }
}

------------------------------------------------------------------------------

R.layout.activity_seek_bar_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.SeekBarTest"
    android:orientation="vertical">
   

        android:id="@+id/image"
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:src="@drawable/ajax"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="20dp"/>
            android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="255"
        android:progress="255"
        android:thumb="@drawable/ok"/>
   

        android:id="@+id/image2"
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:src="@drawable/fei"
        android:layout_marginTop="30dp"
        android:layout_marginBottom="20dp"/>
            android:id="@+id/ratingBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="5"
        android:max="255"
        android:progress="255"
        android:stepSize="0.5"/>

            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请拖动绿色小球或者点击不同的星星观察图片效果"
        android:layout_marginLeft="20dp"
        android:textSize="20px"/>

********************************************************************************************************************

九、StackViewTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.SimpleAdapter;
import android.widget.StackView;

import com.zxl.myapplication.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class StackViewTest extends Activity {
    StackView stackView;
    int[] imageIds=new int[]{
            R.drawable.ajax,
            R.drawable.java,
            R.drawable.classic,
            R.drawable.ee
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stack_view_test);
        stackView=findViewById(R.id.mStackView);
        List> listItems=new ArrayList>();
        for(int i=0;i             Map listItem=new HashMap();
            listItem.put("image",imageIds[i]);
            listItems.add(listItem);
        }
        SimpleAdapter simpleAdapter=new SimpleAdapter(this,
                listItems,
                R.layout.cell,
                new String[]{"image"},
                new int[]{R.id.image1});
        stackView.setAdapter(simpleAdapter);
    }
    public void prev(View view){
        stackView.showPrevious();
    }
    public void next(View view){
        stackView.showNext();
    }
}

-----------------------------------------------------

R.layout.activity_stack_view_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.StackViewTest"
    android:orientation="vertical">
            android:id="@+id/mStackView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:loopViews="true">

   
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="上一个"
            android:onClick="prev"/>
                    android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下一个"
            android:onClick="next"/>


   

********************************************************************************************************************

十、ViewFlipperTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ViewFlipper;

import com.zxl.myapplication.R;

public class ViewFlipperTest extends Activity {

    private ViewFlipper viewFlipper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_flipper_test);
        viewFlipper=findViewById(R.id.details);
    }
    public void prev(View view){
        viewFlipper.setInAnimation(this,R.anim.slide_in_right);
        viewFlipper.setOutAnimation(this,R.anim.slide_out_left);
        //显示上一个组件
        viewFlipper.showPrevious();
        //停止自动播放
        viewFlipper.stopFlipping();
    }
    public void next(View source){
        viewFlipper.setInAnimation(this,R.anim.slide_in_left);
        viewFlipper.setOutAnimation(this,R.anim.slide_out_right);
        //显示下一个组件
        viewFlipper.showNext();
        //停止自动播放
        viewFlipper.stopFlipping();

    }
    public void auto(View source){
        viewFlipper.setInAnimation(this,R.anim.slide_in_left);
        viewFlipper.setOutAnimation(this,R.anim.slide_out_right);
        viewFlipper.startFlipping();
    }
}

------------------------------------------------------------------------------

R.layout.activity_view_flipper_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.ViewFlipperTest"
    android:layout_margin="20dp">
            android:id="@+id/details"
        android:layout_margin="50dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:flipInterval="1000">
                    android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/ee"/>
                    android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/java"/>
                    android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:src="@drawable/ajax"/>

   
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:onClick="prev"
        android:text="上一个"/>
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerInParent="true"
        android:onClick="auto"
        android:text="自动播放"/>
            android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:onClick="next"
        android:text="下一个"/>

------------------------------------------

R.anim.slide_in_righ.xml 文件:

<?xml version="1.0" encoding="utf-8"?>

   

            android:fromXDelta="100%p"
        android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

--------------------------------

R.anim.slide_out_left.xml 文件

<?xml version="1.0" encoding="utf-8"?>

   

            android:fromXDelta="0"
        android:toXDelta="-100%p"
        android:duration="@android:integer/config_mediumAnimTime"/>

-------------------------------------------------------

R.anim.slide_in_left.xml 文件:

<?xml version="1.0" encoding="utf-8"?>

   

            android:fromXDelta="-100%p"
        android:toXDelta="0"
        android:duration="@android:integer/config_mediumAnimTime"/>

---------------------------------------------------

R.anim.slide_out_right.xml 文件:

<?xml version="1.0" encoding="utf-8"?>

   

            android:fromXDelta="0"
        android:toXDelta="100%p"
        android:duration="@android:integer/config_mediumAnimTime"/>

********************************************************************************************************************

十一、ViewSwitcherTest.java 文件:

package com.zxl.myapplication.viewmake;

import android.graphics.drawable.Drawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.ViewSwitcher;

import com.zxl.myapplication.R;

import java.util.ArrayList;

public class ViewSwitcherTest extends AppCompatActivity {

    //定义一个常量,用于显示每屏显示的应用程序数目
    public static final int NUMBER_PER_SCREEN=12;
    //代表应用程序的内部类
    public static class DataItem{
        //应用程序名称
        public String dataName;
        //应用程序图标
        public Drawable drawable;

    }
    //保存系统所有应用程序的list集合
    private ArrayList items=new ArrayList();
    //记录当前正在显示第几屏的程序
    private int screenNo=-1;
    //保存程序所占用的总屏数
    private int screenCount;
    ViewSwitcher switcher;
    //创建layoutInflater 对象
    LayoutInflater inflater;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_switcher_test);
        inflater=LayoutInflater.from(ViewSwitcherTest.this);
        //创建一个包含40个程序的list集合,用于模拟包含40个应用程序
        for(int i=0;i<40;i++){
            String lable=""+i;
            Drawable drawable=getResources().getDrawable(R.drawable.ee);
            DataItem item=new DataItem();
            item.dataName=lable;
            item.drawable=drawable;
            items.add(item);
        }
        //计算应用程序所占的总屏数
        //如果应用程序的数量能整除NUMBER_PER_SCREEN,除法的结果就是总屏数
        //如果不能整除,总屏数就加1
        screenCount=items.size()%NUMBER_PER_SCREEN==0?
                items.size()/NUMBER_PER_SCREEN:
                items.size()/NUMBER_PER_SCREEN+1;
        switcher=findViewById(R.id.viewSwitcher);
        switcher.setFactory(new ViewSwitcher.ViewFactory() {
            //实际上就是返回一个gridview组件
            @Override
            public View makeView() {
                //加载R.layout.slideview 组件,实际上就是一个gridview 组件
                return inflater.inflate(R.layout.slideview,null);
            }
        });
        next(null);
    }
    public void next(View view){
        if (screenNo             screenNo++;
            //为ViewSwitcher 的组件显示过程设置动画
            switcher.setInAnimation(this,R.anim.slide_in_right);
            //为ViewSwitcher 的组件隐藏过程设置动画
            switcher.setOutAnimation(this,R.anim.slide_out_left);
            //控制下一屏将要显示的GridView对应的adapter
            ((GridView) switcher.getNextView()).setAdapter(adapter);
            //单击右边按钮显示下一屏
            //学习手势检测后,也可通过手势检测实现显示下一屏
            switcher.showNext();

        }
    }
    public void prev(View view){
        if (screenNo>0){
            screenNo--;
            //为ViewSwitcher 的组件显示过程设置动画
            switcher.setInAnimation(this,R.anim.slide_in_left);
            //为ViewSwitcher 的组件隐藏过程设置动画
            switcher.setOutAnimation(this,R.anim.slide_out_right);
            //控制下一屏将要显示的GridView对应的adapter
            ((GridView) switcher.getNextView()).setAdapter(adapter);
            //单击右边按钮显示下一屏
            //学习手势检测后,也可通过手势检测实现显示下一屏
            switcher.showPrevious();

        }
    }
    //该BaseAdapter 负责为每屏显示的gridView提供列表项
    private BaseAdapter adapter=new BaseAdapter() {
        @Override
        public int getCount() {
            //如果已经到了最后一屏,且应用程序的数量不能被整除NUMBER_PER_SCREEN
            if (screenNo==screenCount-1&&items.size()%NUMBER_PER_SCREEN!=0){
                return items.size()% NUMBER_PER_SCREEN;
            }
            return NUMBER_PER_SCREEN;
        }

        @Override
        public DataItem getItem(int position) {
            return items.get(screenNo*NUMBER_PER_SCREEN + position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup viewGroup) {
            View view=convertView;
            if (convertView==null){
                view=inflater.inflate(R.layout.labelicon,null);
            }
            ImageView imageView=(ImageView) view.findViewById(R.id.imageView);
            imageView.setImageDrawable(getItem(position).drawable);
            TextView textView=view.findViewById(R.id.textView);
            textView.setText(getItem(position).dataName);
            return view;
        }
    };
}

---------------------------------------------------------

R.layout.activity_view_switcher_test.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".viewmake.ViewSwitcherTest"
    android:layout_margin="20dp">
   
            android:id="@+id/viewSwitcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

   
   
            android:id="@+id/btn_prev"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:onClick="prev"
        android:text="上一屏" />
   
            android:id="@+id/btn_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:onClick="next"
        android:text="下一屏" />


********************************************************************************************************************

十二、HandDraw.java 文件:

package com.zxl.specialimage;

import android.app.Activity;
import android.graphics.BlurMaskFilter;
import android.graphics.Color;
import android.graphics.EmbossMaskFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import com.zxl.myapplication.R;
import java.lang.reflect.Field;


public class HandDraw extends Activity {
    EmbossMaskFilter emboss;
    BlurMaskFilter blur;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hand_draw);
        emboss = new EmbossMaskFilter(new float[]{
                1.5f, 1.5f, 1.5f}, 0.6f, 6, 4.2f);
        blur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
        setOverflowShowingAlways();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = new MenuInflater(this);
        //装载R.menu.my_menu 对应的菜单,并添加到menu中
        inflater.inflate(R.menu.my_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        TwoCacheDrawView dv = findViewById(R.id.draw);
        switch (item.getItemId()) {
            case R.id.red:
                dv.paint.setColor(Color.RED);
                item.setChecked(true);
                break;

            case R.id.green:
                dv.paint.setColor(Color.GREEN);
                item.setChecked(true);
                break;
            case R.id.blue:
                dv.paint.setColor(Color.BLUE);
                item.setChecked(true);
                break;
            case R.id.width_1:
                dv.paint.setStrokeWidth(1);

                break;
            case R.id.width_3:
                dv.paint.setStrokeWidth(3);

                break;
            case R.id.width_5:
                dv.paint.setStrokeWidth(5);

                break;
            case R.id.blur:
                dv.paint.setMaskFilter(blur);
                break;
            case R.id.emboss:
                dv.paint.setMaskFilter(emboss);

                break;
        }
        return true;
    }

    /***显示menu菜单*/
    private void setOverflowShowingAlways() {

        try {
                ViewConfiguration config = ViewConfiguration.get(this);
                Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
                menuKeyField.setAccessible(true);
                menuKeyField.setBoolean(config, false);
            } catch (Exception e) {
                e.printStackTrace();

            }

    }

}

--------------------------------------------

R.layout.activity_hand_draw.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.zxl.specialimage.HandDraw"
    android:orientation="vertical">
            android:id="@+id/draw"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

********************************************************************************************************************

十三、MatrixActivity.java 文件:

package com.zxl.specialimage;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.zxl.myapplication.R;

public class MatrixActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_matrix);

        MatrixView matrixView=findViewById(R.id.matrixView);


    }
}

---------------------------------------------------

R.layout.activity_matrix.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
            android:id="@+id/matrixView"
        android:layout_width="200dp"
        android:layout_height="200dp">

   

********************************************************************************************************************

十四、MatrixView.java 文件:

package com.zxl.specialimage;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;

import com.zxl.myapplication.R;

/**
 * TODO: document your custom view class.
 */
public class MatrixView extends View {

    //初始的图片资源
    private Bitmap bitmap;
    //Matrix 实例
    private Matrix matrix=new Matrix();
    //设置倾斜度
    private float sx=0.0f;
    //位图宽和高
    private int width,height;
    //缩放比例
    private float scale=1.0f;
    //判断缩放还是旋转
    private boolean isScale=false;

    public MatrixView(Context context) {
        super(context);

    }

    public MatrixView(Context context, AttributeSet set) {
        super(context, set);
        //获得位图
        bitmap=((BitmapDrawable)context.getResources().getDrawable(R.drawable.ajax)).getBitmap();
        //获得位图高
        height=bitmap.getHeight();
        //使得当前视图获得焦点
        this.setFocusable(true);

    }

    public MatrixView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }


    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //重置Matrix
        matrix.reset();
        if (!isScale){
            //旋转Matrix
            matrix.setSkew(sx,0);
        }else{
            //缩放比例Matrix
            matrix.setScale(scale,scale);
        }
        //根据原始位图和Matrix 创建新图片
        Bitmap bitmap2=Bitmap.createBitmap(bitmap,0,0,width,height,matrix,true);
        //绘制新位图
        canvas.drawBitmap(bitmap2,matrix,null);

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode){
            case KeyEvent.KEYCODE_A:
                isScale=false;
                sx +=0.1;
                postInvalidate();
                break;
            case KeyEvent.KEYCODE_D:
                isScale=false;
                sx -=0.1;
                postInvalidate();
                break;
            case KeyEvent.KEYCODE_W:
                isScale=true;
                if (scale<2.0) scale+=0.1;
                postInvalidate();
                break;
            case KeyEvent.KEYCODE_S:
                isScale=true;
                if (scale>0.5) scale-=0.1;
                postInvalidate();
                break;

        }
        return super.onKeyDown(keyCode,event);
    }
}


********************************************************************************************************************

十五、MoveBack.java 文件:

package com.zxl.specialimage;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;
import android.view.View;

import com.zxl.myapplication.R;

import java.util.Timer;
import java.util.TimerTask;

public class MoveBack extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new plainView(this));
    }
    class plainView extends View{
        //记录背景位图的实际高度
        final int BACK_HEGHT=1700;
        //背景图片
        private Bitmap back;
        private Bitmap plane;
        //背景图片的开始位置
        final int WIDTH=320;
        final int HEIGHT=440;
        private int startY=BACK_HEGHT-HEIGHT;
        public plainView(Context context){
            super(context);
            back= BitmapFactory.decodeResource(context.getResources(),R.drawable.taikongbackground);
            plane=BitmapFactory.decodeResource(context.getResources(),R.drawable.plaine);
            final Handler handler=new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what==0x123){
                        //重新开始移动
                        if (startY<=0){
                            startY=BACK_HEGHT-HEIGHT;

                        }else {
                            startY-=3;
                        }
                    }
                    invalidate();
                }
            };
            new Timer().schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                }
            },0,100);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            //根据原始位图和Matrix创建新图片
           int a= back.getWidth();
            Bitmap bitmap2=Bitmap.createBitmap(back,0,startY,WIDTH,HEIGHT);
            //绘制新位图
            canvas.drawBitmap(bitmap2,0,0,null);
            //绘制飞机
            canvas.drawBitmap(plane,160,380,null);
        }
    }
}
********************************************************************************************************************

十六、PinBall.java 文件:

package com.zxl.specialimage;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

public class PinBall extends AppCompatActivity {
    //桌面的宽度
    private int tableWidth;
    //桌面的高度
    private int tableHeight;
    //球拍的垂直位置
    private int racketY;
    //下面定义球拍的高度和宽度
    private final int RACKET_HEIGHT=20;
    private final int RACKET_WIDTH=70;

    //小球的大小
    private final int BALL_SIZE=18;
    //小球纵向的运行速度
    private int ySpeed=15;
    Random random=new Random();
    //返回一个-0.5~0.5 的比率,用于控制小球的运行方向
    private double xyRate=random.nextDouble()-0.5;
    //小球横向的运行速度
    private int xSpeed= (int) (ySpeed*xyRate*2);
    //ballX和ballY 代表小球的坐标
    private int ballX=random.nextInt(200)+20;
    private int ballY=random.nextInt(10)+20;
    //racketX代表球拍的水平位置
    private int racketX=random.nextInt(200);
    //游戏是否结束的旗标
    private boolean isClose=false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //创建GameView组件
        final GameView gameView=new GameView(this);
        setContentView(gameView);

        //获取窗口管理器
        WindowManager windowManager=getWindowManager();
        Display display=windowManager.getDefaultDisplay();
        DisplayMetrics metrics=new DisplayMetrics();
        display.getMetrics(metrics);
        //获得屏幕宽和高
        tableWidth=metrics.widthPixels;
        tableHeight=metrics.heightPixels;
        racketY=tableHeight-80;
        final Handler handler=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if (msg.what==0x123){
                    gameView.invalidate();
                }
                super.handleMessage(msg);
            }
        };
        gameView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent event) {
                //获取由哪个键触发的事件
                switch (event.getKeyCode()){
                    //控制挡板左移
                    case KeyEvent.KEYCODE_A:
                        if (racketX > 0) racketX -= 10;
                        break;
                        //控制挡板右移
                    case KeyEvent.KEYCODE_D:
                        if (racketX < tableWidth - RACKET_WIDTH&& (racketY                         break;
                }
                //通知gameview组件重绘
                gameView.invalidate();
                return true;
            }
        });
        final Timer timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                //如果小球碰到左边边框
                if (ballX <= 0|| ballX >= tableWidth - BALL_SIZE){
                    xSpeed= -xSpeed;                }
                //如果小球高度超出了球拍位置,且横向不在球拍范围之内,游戏结束
                if (ballY >= racketY-BALL_SIZE && (ballX < racketX || ballX > racketX + RACKET_WIDTH)){
                    timer.cancel();
                    //设置游戏是否结束的旗标为true
                    isClose=true;
                }
                //如果小球位于球拍之内,且到达球拍位置,小球反弹
                else if (ballY<=0||(ballX>racketX && ballX <=racketX+RACKET_WIDTH)){
                    ySpeed = -ySpeed;
                }
                //小球坐标增加
                ballY += 1.3*ySpeed;
                ballX += 1.3*xSpeed;
                //发送消息,通知系统重绘组件
                handler.sendEmptyMessage(0x123);
            }

        },0,100);
    }


    class GameView extends View{
        Paint paint=new Paint();
        public GameView(Context context){
            super(context);
            setFocusable(true);
        }
        //重写view的onDraw() 方法,实现绘画
        public void onDraw(Canvas canvas){
            paint.setStyle(Paint.Style.FILL);
            //设置去锯齿
            paint.setAntiAlias(true);
            //如果游戏已经结束
            if (isClose){
                paint.setColor(Color.RED);
                paint.setTextSize(40);
                canvas.drawText("游戏已结束",50,200,paint);
            }else {
                //设置颜色,并绘制小球
                paint.setColor(Color.rgb(240,240,80));
                canvas.drawCircle(ballX,ballY,BALL_SIZE,paint);
                paint.setColor(Color.rgb(80,80,200));
                canvas.drawRect(racketX,racketY,racketX+RACKET_WIDTH,racketY+RACKET_HEIGHT,paint);
            }
        }
    }
}
********************************************************************************************************************

十七、TwoCacheDrawView.java文件:

package com.zxl.specialimage;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * TODO: document your custom view class.
 */
public class TwoCacheDrawView extends View {

    float preX;
    float preY;
    private Path path;
    public Paint paint=null;
    final int VIEW_WIDTH=320;
    final int VIEW_HEIGHT=480;
    //定义一个内存中的图片,该图片将作为缓冲区
    Bitmap cacheBitmap=null;
    //定义cacheBitmap=null
    //定义cacheBitmap上的canvas 对象
    Canvas cacheCanvas=null;

    public TwoCacheDrawView(Context context, AttributeSet set){
        super(context,set);
        //创建一个与该view相同大小的缓冲区
        cacheBitmap=Bitmap.createBitmap(VIEW_WIDTH,VIEW_HEIGHT, Bitmap.Config.ARGB_8888);
        cacheCanvas=new Canvas();
        path=new Path();
        //设置cacheCanvas 将会绘制到内存中的cacheBitmap上
        cacheCanvas.setBitmap(cacheBitmap);
        //设置画笔的颜色
        paint=new Paint(Paint.DITHER_FLAG);
        paint.setColor(Color.RED);
        //设置画笔风格
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(1);;
        //反锯齿
        paint.setAntiAlias(true);
        paint.setDither(true);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {

        //获取拖动事件的发生位置
        float x=event.getX();
        float y=event.getY();
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                path.moveTo(x,y);
                preX=x;
                preY=y;
                break;
            case MotionEvent.ACTION_MOVE:
                path.quadTo(preX,preY,x,y);
                preY=y;
                preX=x;
                break;
            case MotionEvent.ACTION_UP:
                cacheCanvas.drawPath(path,paint);
                path.reset();
                break;
        }
        invalidate();
        //返回true 表明处理方法已经处理该事件
        return true;
    }


    public TwoCacheDrawView(Context context) {
        super(context);

    }

    public TwoCacheDrawView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }


    @Override
    protected void onDraw(Canvas canvas) {
        Paint bmPaint=new Paint();
        //将cacheBitmap 绘制到该view组件上
        canvas.drawBitmap(cacheBitmap,0,0,bmPaint);
        //沿着path绘制
        canvas.drawPath(path,paint);

    }


}
************************************************************************************************************************

里面用到的string等资源文件:

strings.xml 文件:


    My Application
    Settings
    Main3Activity
    color
    color_red
    color_green
    color_blue
    width_1
    width_3
    width_5
    blur
    emboss
    width

 

 

 

更多相关文章

  1. android 根据SD卡中图片路径读取并显示SD中的图片――源代码
  2. Android(Java):http options
  3. Android(安卓)文件操作
  4. 代码获取Android的VersionCode和VersionName信息
  5. Android判断文件类型(视频、音频、图片等)
  6. [Android(安卓)Studio][NDK]Execution failed for task ':app:co
  7. Android(安卓)播放MP4文件
  8. android断点续传代码
  9. NPM 和webpack 的基础使用

随机推荐

  1. android 多版本打包之productFlavors 用
  2. Android(java)学习笔记126:Android(安卓)Stu
  3. Android(安卓)中的单元测试(使用AndroidT
  4. Android深入浅出系列课程---Lesson9 AAF1
  5. Android应用开发试题(收集)
  6. 安卓开发38:安卓的滚动条相关属性
  7. Android下打印调用栈
  8. android 软键盘 返回键 消失事件 监听
  9. Android开发6:日志信息输出
  10. Android获取设备唯一标识