我有以下代码,我想在下拉textView时生成事件。 但每当我触摸屏幕时,我的代码都会生成事件。
final TextView pullDown=(TextView)findViewById(R.id.textView2);
pullDown.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
first.setBackgroundColor(Color.WHITE);
pullDown.setHeight(200);
pullDown.setText("Loading");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else if(event.getAction()==android.view.MotionEvent.ACTION_UP){
first.setBackgroundColor(Color.BLUE);
change.setText("OK");
pullDown.setText("Pull Down to Refresh");
pullDown.setHeight(70);
}
return true;
}
});`
答案 0 :(得分:0)
我认为你的要求是:你有一个按钮,当你点击它时,它会进行时间成本计算操作,你希望按钮显示“正在加载”,当工作完成时,按钮显示“下拉到刷新“再次。
根据这种情况,您不能简单地通过setText和Sleep(1000)更改按钮,这将使您的屏幕在第二个期间无响应(因为它在主UI线程中运行)。所以你看不到变化...... Plz尝试使用Thread + Handler或AsyncTask
class BtnAsyncTask extends AsyncTask<String, Integer, String>{
@Override
protected void onPreExecute() {
super.onPreExecute();
first.setBackgroundColor(Color.WHITE);
pullDown.setHeight(200);
pullDown.setText("Loading");
}
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
first.setBackgroundColor(Color.BLUE);
change.setText("OK");
pullDown.setText("Pull Down to Refresh");
pullDown.setHeight(70);
}
}
单击按钮时,和新任务调用:
new BtnAsyncTask().execute();
-------------- 或者您只需要在单击按钮时更改外观,使用可绘制的样式
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@drawable/select_drawable" />
<item android:state_window_focused="true"
android:state_focused="true"
android:drawable="@drawable/normal_drawalbe" />
<item android:drawable="@drawable/normal_drawalbe" />
希望它可以帮助你:)