編輯:關於Android編程
用View來進行動態繪圖,要解決的一個很重要的問題就是如何重繪屏幕。Android的View類中提供了一個postInvalidate()方法,會自動調用View中onDraw方法來重新繪制屏幕。
下面一段代碼實現了任意線拖動紅線的位置。並能自動自動更新線的位置.
[java]
/*
* 用線程來更新View, 畫一條線
*/ www.2cto.com
public class ThreadUpdateView extends View
{
Paint paint = null;
int y = 0;
public ThreadUpdateView(Context context)
{
super(context);
paint = new Paint();
MyThread myThread = new MyThread();
myThread.start(); //啟動線程後紅線會自動下移.
this.setFocusable(true);
}
@Override
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
paint.setColor(Color.RED);
paint.setStrokeWidth(5);
canvas.drawLine(0, y, 444, y, paint);//畫線
}
class MyThread extends Thread
{
@Override
public void run()
{
//一直讓他的值加, 小於400
while (y < 400)
{
y++;
try
{
Thread.sleep(100); //慢點更新
} catch (InterruptedException e)
{
e.printStackTrace();
}
postInvalidate();//View裡面的方法, 讓重畫, 及重新調用onDraw方法. 因為y已經更新.
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
System.out.println("View onKeyUp " + event.getAction());
return super.onKeyUp(keyCode, event);
}
/*
* 做一個功能, 想把線拖動到哪裡就拖動到哪裡.
*/
@Override
public boolean onTouchEvent(MotionEvent event)
{
System.out.println("View "+event.getAction() + " " + event.getX() + " "
+ event.getY());
//return super.onTouchEvent(event);
y = (int) event.getY(); //將當前點擊拖動的位置賦值給y
postInvalidate(); //重新調用onDraw()方法, 來進行重繪.
return true;
}
}
在此會出現兩個關於屏幕事件的問題:
一、如何讓View來捕獲按鍵及觸屏事件, 而不是Activity?
我們知道,當你點擊屏幕的時候,系統是先響應Activity中的onTouchEvent方法(onKeyUp等方法也是)的,而不是響應我們自己設定顯示的View。這就會造成我們在View中寫的onTouchEvent失效。
有2中解決辦法:
方法1. 使用代理。即在Activity中的onTouchEvent方法中直接調用ThreadUpdateView實例中的onTouchEvent方法。
方法2. 使View強行獲得焦點。在View的構造方法中設置this.setFocusable(true);
二、如何讓觸摸事件不傳遞給Activity?
我們知道,在Android中觸摸事件是能進行傳遞的。如View執行完後, 按下事件就傳遞給Activity。
那麼如何讓他不傳遞呢?
解決方法:
將onTouchEvent的返回值寫成return true;
而不是return super.onTouchEvent(event);
說到圓角濾鏡(效果)很多人會想到app的圖標,沒錯,就是圖標。圓角化的圖片用來做圖標很美觀,這是事實。國人喜愛的iPhone的應用圖標采用的就是圓角化,很多Android
1.背景目前網絡中圖片仍然是占用流量較大的一部分,對於移動端更是如此,因此,如何在保證圖片視覺不失真前提下縮小體積,對於節省帶寬和電池電量十分重要。然而目前對於JPEG、
前面博客分析了導致app卡頓慢的直接原因,這裡就從原因出發,分析一些優化方案(這裡主要是從直接影響渲染機制的布局相關進行分析)1)Invalidations,Layout
Android Studio在Android Monitor中包含了一個logcat的tab,可以打印系統事件,比如垃圾回收發生時,實時打印應用消息。為了顯示需要的信息,