用户交互设计师:提供想法及UI设计草图
视觉设计师:想法——真正界面效果图
不满足于标准化组件:没有做不到只有想不到
分析清楚 ①UI呈现②UI事件
API Guides——Animation and Graphics——Canvas and Drawable
In order to request an invalidate from a thread other than your main Activity's thread, you must call postInvalidate().
LinearLayout——ViewGroup——View
——————/
——————/
Android界面事件分类:①KeyEvent②TouchEvent③TrackBallEvent(轨迹球,已淘汰)
事件触发两种方法:①继承View时复写事件函数,如onTouchEvent(内部)②绑定监听器(外部)
——————/事件分发上传机制
PhoneWindow也存在onTouchEven等函数
分发顺序:焦点子View——RootView——Window——Activity
如ListView,可为每行设置onClick但繁琐,简单方法上传到至父容器,通过Index索引
例如为MyView和MyActivity均复写如下函数:
——————/长按事件
视觉设计师:想法——真正界面效果图
不满足于标准化组件:没有做不到只有想不到
分析清楚 ①UI呈现②UI事件
API Guides——Animation and Graphics——Canvas and Drawable
In order to request an invalidate from a thread other than your main Activity's thread, you must call postInvalidate().
LinearLayout——ViewGroup——View
——————/
public class MyView extends View{
int x,y;
Paint paint;
public MyView(Context context) {
super(context);
paint=new Paint();
paint.setColor(Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(x,y,x+60,y+40,paint); //顺时针旋转
}
}
public class MyActivity extends Activity {
MyView myView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView=new MyView(this);
setContentView(myView);
new Thread(new Runnable() {
@Override
public void run() {
while(!Thread.currentThread().isInterrupted()){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
myView.postInvalidate(); //重新调用onDraw
}
}
}).start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
myView.y+=3;
return false;
}
}
——————/
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView myView=new MyView(this);
myView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MyActivity.this,"myView",Toast.LENGTH_LONG).show();
}
});
setContentView(myView);
}
}
存在问题:点击屏幕任何地方都打印myView(画布很大,画的按钮小而已)
——————/
Android界面事件分类:①KeyEvent②TouchEvent③TrackBallEvent(轨迹球,已淘汰)
事件触发两种方法:①继承View时复写事件函数,如onTouchEvent(内部)②绑定监听器(外部)
——————/事件分发上传机制
PhoneWindow也存在onTouchEven等函数
分发顺序:焦点子View——RootView——Window——Activity
如ListView,可为每行设置onClick但繁琐,简单方法上传到至父容器,通过Index索引
例如为MyView和MyActivity均复写如下函数:
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction()==MotionEvent.ACTION_DOWN){
Log.i("lyl", " Touch_lyl");
}
return true/false;
}
MyView中返回True,则MyActivity中不打印,反之打印
——————/长按事件
@Override
public boolean onTouchEvent(MotionEvent event) { //MyView中
if(event.getAction()==MotionEvent.ACTION_UP){
if(event.getEventTime()-event.getDownTime()>1000){
Log.i("lyl", "Long Touch");
}
}
return true;
}