目 录
刮刮卡案例【ScratchCard】
源码【可用Gitee直接拷贝】:https://gitee.com/lwx001/ScratchCard
结构图
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg" />
<ImageView
android:id="@+id/imgv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/scratch_card" />
</RelativeLayout>
MainActivity.java
package cn.lwx.scratchcard;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private Bitmap alterbitmap;
private double nX, nY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.imgv);
//从资源文件中解析一张bitmap
Bitmap bitmap =
BitmapFactory.decodeResource(getResources(),
R.drawable.scratch_card);
alterbitmap = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), bitmap.getConfig());
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
nX = (double) bitmap.getWidth() / dm.widthPixels;
nY = (double) bitmap.getHeight() / dm.heightPixels;
//创建一个canvas对象
Canvas canvas = new Canvas(alterbitmap);
//创建画笔对象
Paint paint = new Paint();
//为画笔设置颜色
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
//创建Matrix对象
Matrix matrix = new Matrix();
//在alterBitmap上画图
canvas.drawBitmap(bitmap, matrix, paint);
//为ImageView设置触摸监听
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
try {
int x = (int) event.getX();
int y = (int) event.getY();
for (int i = -100; i < 100; i++) {
for (int j = -100; j < 100; j++) {
//将区域类的像素点设为透明像素
if (Math.sqrt((i * i) + (j * j)) <= 100) {
alterbitmap.setPixel((int) (x * nX) + i,
(int) (y * nY + 90) + j, Color.TRANSPARENT);
}
}
}
imageView.setImageBitmap(alterbitmap);
} catch (Exception e) {
//加try{}catch(){}放置用户触摸图片以外的地方而异常退出
e.printStackTrace();
}
//销毁掉该触摸事件
return true;
}
});
}
}
运行效果图
补间动画(Tween Animation)
源码【可用Gitee直接拷贝】:https://gitee.com/lwx001/Tween
逐帧动画(Frame Animation)
Fragment
推荐学习网址:菜鸟教程
https://www.runoob.com/w3cnote/android-tutorial-fragment-base.html
ViewPager的简单使用
https://www.runoob.com/w3cnote/android-tutorial-viewpager.html
RecyclerView 控件
导入recyclerView控件包
实战演练
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--android.support.v7.widget.RecyclerView-->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/id_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>
ltem_home.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/iv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/iv1" />
<TextView
android:id="@+id/id_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="1" />
</LinearLayout>
MainActivity.java
package cn.lwx.recyclerviewshow;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
//import android.support.v7.app.AppCompatActivity;
//import android.os.Bundle;
//import android.support.v7.widget.LinearLayoutManager;
//import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private List<Integer> mDatas;
private HomeAdapter mAdapter;
private int[] img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
}
protected void initData() {
mDatas = new ArrayList<Integer>();
for (int i = 1; i < 11; i++) {
mDatas.add(i);
}
img = new int[]{
R.drawable.iv1, R.drawable.iv2,
R.drawable.iv3, R.drawable.iv4, R.drawable.iv5,
R.drawable.iv6, R.drawable.iv7, R.drawable.iv8,
R.drawable.iv9, R.drawable.iv10
};
}
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
MainActivity.this).inflate(R.layout.item_home, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
holder.tv.setText("这是第" + mDatas.get(position).toString() + "个精灵");
holder.iv.setImageResource(img[position]);
}
@Override
public int getItemCount() {
return mDatas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv;
ImageView iv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
iv = (ImageView) view.findViewById(R.id.iv_num);
}
}
}
}
下拉刷新
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--android.support.v4.widget.SwipeRefreshLayout-->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="70dp"
android:gravity="center"
android:text="下拉刷新"
android:textSize="20sp" />
</ScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>
MainActivity.java
package cn.lwx.swiperefresh;
import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.os.Bundle;
import android.os.Handler;
//import android.support.v4.widget.SwipeRefreshLayout;
//import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv;
private SwipeRefreshLayout swipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.textView1);
swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
swipeRefreshLayout.setColorSchemeResources(
android.R.color.holo_red_light,
android.R.color.holo_green_light,
android.R.color.holo_blue_light);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
tv.setText("正在刷新");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
tv.setText("刷新完成");
swipeRefreshLayout.setRefreshing(false);
}
}, 3000);
}
});
}
}