編輯:關於Android編程
今天我們學習撕衣服。我先說一下撕衣服的原理: 撕衣服有2張圖片,一張是美女穿外衣的圖片,一張是美女穿內衣的圖片。當我們手指滑動後,然後將美女穿外衣衣服的圖片設置為透明色,這樣下面的圖片就顯示出來了。
直接上代碼:
public class MainActivity extends Activity {
private Bitmap bmpCopy;
private Paint paint;
private Canvas canvas;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1: 因為我修改外衣的圖片,所以要給外衣設置副本
Bitmap bmpSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);
bmpCopy = Bitmap.createBitmap(bmpSrc.getWidth(), bmpSrc.getHeight(), bmpSrc.getConfig());
paint = new Paint();
canvas = new Canvas(bmpCopy);
canvas.drawBitmap(bmpSrc, new Matrix(), paint);
imageView = (ImageView) findViewById(R.id.lv2);
imageView.setImageBitmap(bmpCopy);
//2:監聽觸摸事件
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//我們只關心滑動事件
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
//手指滑動的軌跡設置為透明色
int x = (int) event.getX();
int y = (int) event.getY();
cleanImage(x, y);
break;
default:
break;
}
return true;
}
});
}
//因為每次只設置1個像素,這樣很慢
public void cleanImage(int x, int y)
{
for(int i = -10; i < 10; i++)
{
for(int j = -10; j < 10; j++)
{
//繪制以x,y為圓心半徑為10的圓
if(Math.sqrt(i*i + j*j) <= 10)
{
//判斷手指是否越界, 如果越界不處理
if(x+i < bmpCopy.getWidth() && y+j < bmpCopy.getHeight() && x+i >=0 && y+j >=0)
{
//設置透明色
bmpCopy.setPixel(x+i, y+j, Color.TRANSPARENT);
//設置圖像
imageView.setImageBitmap(bmpCopy);
}
}
}
}
}
}

Android:異步任務基礎
今天面試的時候,面試官和我說起同步和異步,因為說起同步我就是想到線程同步,然後共享臨界資源啊死鎖啊什麼的,所以一直在說這個,線程異步倒是從來沒聽過。剛才看了場球想起這件事
Android 上傳頭像(文件)到服務器
現在很多app都用到了頭像的功能,我的項目中也用到了。頭像上傳分幾步:1.獲取頭像2.剪裁頭像3.文件上傳4.服務器的接受保存首先第一步,無非就是兩種方式1,拍照2,相冊
Retrofit Token過期自動刷新並重新請求接口
在有心課堂的群裡,有網友提出如下場景:當前開發的 App 遇到一個問題:當請求某個接口時,由於 token 已經失效,所以接口會報錯。但是產品經理希望 app 能夠馬上刷
Android View移動的3種方式總結
前言在Android開發中,View一直是Android開發人員的一塊心病,一方面想要進階,一方面又害怕進階,可以說Android的View是進階路上的最大絆腳石,因為它