近期Android 基础复习用 简单小练习
AndroidManifest.xml 文件内容:
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
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 文件:
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_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"
/>
********************************************************************************************************************
四、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
}
}
------------------------------------------
R.layout.activity_image_switcher_test.xml 文件
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:layout_width="match_parent"
android:layout_height="wrap_content"
android:horizontalSpacing="1pt"
android:verticalSpacing="2pt"
android:numColumns="4"
android:gravity="center">
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 文件:
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
}
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
}
new Timer().schedule(new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(123);
}
},0,200);
}
}
-------------------------------------------------------
R.layout.activity_ni_hong_deng_test.xml 文件:
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="320dp"
android:height="320dp"
android:background="#f00"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="280dp"
android:height="280dp"
android:background="#0f0"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="240dp"
android:height="240dp"
android:background="#00f"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="200dp"
android:height="200dp"
android:background="#ff0"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="160dp"
android:height="160dp"
android:background="#f0f"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:width="120dp"
android:height="120dp"
android:background="#491"/>
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 文件:
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_height="wrap_content"
android:orientation="horizontal">
android:layout_height="wrap_content">
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>
android:layout_height="wrap_content" />
android:layout_width="52dp"
android:layout_height="34dp" />
android:layout_height="52dp"
android:text="任务完成的进度" />
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="42dp"
android:max="100"
android:layout_marginBottom="20dp"/>
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 文件:
android:id="@+id/image" android:id="@+id/image2"
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:layout_width="match_parent"
android:layout_height="240dp"
android:src="@drawable/ajax"
android:layout_marginTop="30dp"
android:layout_marginBottom="20dp"/>
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:progress="255"
android:thumb="@drawable/ok"/>
android:layout_width="match_parent"
android:layout_height="240dp"
android:src="@drawable/fei"
android:layout_marginTop="30dp"
android:layout_marginBottom="20dp"/>
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_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
for(int i=0;i
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 文件:
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".viewmake.StackViewTest"
android:orientation="vertical">
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:loopViews="true">
android:layout_height="wrap_content"
android:orientation="horizontal">
android:layout_height="wrap_content"
android:text="上一个"
android:onClick="prev"/>
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 文件:
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:layout_margin="50dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:flipInterval="1000">
android:layout_height="wrap_content"
android:src="@drawable/ee"/>
android:layout_height="wrap_content"
android:src="@drawable/java"/>
android:layout_height="wrap_content"
android:src="@drawable/ajax"/>
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:onClick="prev"
android:text="上一个"/>
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:onClick="auto"
android:text="自动播放"/>
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="next"
android:text="下一个"/>
------------------------------------------
R.anim.slide_in_righ.xml 文件:
android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
--------------------------------
R.anim.slide_out_left.xml 文件
android:toXDelta="-100%p"
android:duration="@android:integer/config_mediumAnimTime"/>
-------------------------------------------------------
R.anim.slide_in_left.xml 文件:
android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
---------------------------------------------------
R.anim.slide_out_right.xml 文件:
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
//记录当前正在显示第几屏的程序
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
//为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 文件:
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:layout_width="match_parent"
android:layout_height="match_parent">
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_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 文件:
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: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 文件:
android:layout_height="match_parent"
android:orientation="vertical">
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
}
//通知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 文件: