就像我们有performClick()方法来模拟views
这样的按钮的点击事件一样,我们也有任何方法可以用来模拟Java代码的“触摸并按住”操作。
我编写了模拟触摸事件的代码,但是没有执行触摸操作的能力。
这是我的代码
private void onMyTouchDownEvent() {
pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_DOWN, 100,100,0.5f,5,0,1,1,0,0));
}
private void onMyTouchUpEvent() {
pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_UP, 100,100,0.5f,5,0,1,1,0,0));
}
pause.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN: storiesProgressView.pause();
return true;
case MotionEvent.ACTION_UP: storiesProgressView.resume();
return true;
}
return false;
}
});
这是Java代码
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;
import ateam.com.stories.API.CheckNetwork;
import ateam.com.stories.API.StoriesProgressView;
import ateam.com.stories.ApacheFileUtils.FilenameUtils;
public class MainActivity extends Activity implements StoriesProgressView.StoriesListener,View.OnClickListener {
private static final String TAG = MainActivity.class.getSimpleName();
private StoriesProgressView storiesProgressView;
private String[] resources = { "http://www.selfilife.com/temp/sample1.png",
"http://www.selfilife.com/temp/sample2.png",
"https://images2.alphacoders.com/548/548276.jpg",
"http://www.selfilife.com/temp/sample4.png",
"http://www.selfilife.com/temp/sample5.png",
"http://www.selfilife.com/temp/sample6.png"
};
private ImageView image;
private int counter = 0;
//private int tcounter = 0;
private boolean isTouched;
private View reverse,skip,pause;
ProgressBar pb;
Long newduration = 5000L;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.image);
storiesProgressView = (StoriesProgressView) findViewById(R.id.stories);
pb = (ProgressBar) findViewById(R.id.pb);
reverse = findViewById(R.id.reverse);
skip = findViewById(R.id.skip);
pause = findViewById(R.id.pause);
reverse.setOnClickListener(this);
skip.setOnClickListener(this);
storiesProgressView.setStoriesCount(resources.length); // <- set stories
storiesProgressView.setStoryDuration(newduration); // <- set a story duration
storiesProgressView.setStoriesListener(this); // <- set listener
storiesProgressView.startStories(); // <- start progress
//tcounter = counter;
//Log.d(TAG,"resources[counter] = "+resources[counter]);
Bitmap bmp = BitmapFactory.decodeFile(resources[counter]);
if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png") || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg")) {
//Log.d(TAG,"image is there");
image.setVisibility(View.VISIBLE);
//image.setImageBitmap(bmp);
loadImageFromPicasso(resources[counter]);
} else {
//Log.d(TAG,"video is there");
image.setVisibility(View.GONE);
}
pause.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
storiesProgressView.pause();
return true;
}
});
pause.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
storiesProgressView.pause();
//Log.d(TAG,"touch down");
}
if (event.getAction() == android.view.MotionEvent.ACTION_UP && event.getAction() == MotionEvent.ACTION_CANCEL) {
storiesProgressView.resume();
//Log.d(TAG,"touch up");
}
return false;
}
});
}
@Override
public void onNext() {
Bitmap bmp = BitmapFactory.decodeFile(resources[++counter%resources.length]);
//Log.d(TAG,"onNext = "+resources[counter]);
Log.d(TAG,"counter = "+counter);
//tcounter = counter;
if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png") || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg") ) {
//Log.d(TAG,"(onNext) image is there");
image.setVisibility(View.VISIBLE);
//image.setImageBitmap(bmp);
loadImageFromPicasso(resources[counter]);
} else {
//Log.d(TAG,"(onNext) video is there");
image.setVisibility(View.GONE);
}
}
@Override
public void onPrev() {
if (counter - 1 < 0) return;
Bitmap bmp = BitmapFactory.decodeFile(resources[--counter%resources.length]);
Log.d(TAG,"onPrev = "+resources[counter]);
//tcounter = counter;
if(FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("png") || FilenameUtils.getExtension(resources[counter]).toString().toLowerCase().equalsIgnoreCase("jpg")) {
Log.d(TAG,"(onPrev) image is there");
image.setImageBitmap(bmp);
//image.setVisibility(View.VISIBLE);
loadImageFromPicasso(resources[counter]);
} else {
Log.d(TAG,"(onPrev) video is there");
image.setVisibility(View.GONE);
}
}
@Override
public void onComplete() {
if (counter == resources.length - 1) {
//image.setImageResource(Integer.parseInt(resources[0]));
//Bitmap bmp = BitmapFactory.decodeFile(resources[0]);
//image.setImageBitmap(bmp);
Log.d(TAG,"onComplete = "+resources[counter]);
finish();
//storiesProgressView.startStories();
}
}
@Override
protected void onDestroy() {
// Very important !
storiesProgressView.destroy();
super.onDestroy();
}
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.reverse: storiesProgressView.reverse();
break;
case R.id.skip: storiesProgressView.skip();
break;
default:break;
}
}
private void loadImageFromPicasso(String url) {
Log.d(TAG,"picasso loading url = "+url);
if (CheckNetwork.isInternetAvailable(this))
{
//yes, internet is available
//onMyTouchDownEvent();
//pause.performLongClick();
//storiesProgressView.pause();
pb.setVisibility(View.VISIBLE);
Picasso.get().load(url).placeholder(R.color.gray).into(image, new Callback() {
@Override
public void onSuccess() {
pb.setVisibility(View.INVISIBLE);
Log.d(TAG,"picasso success");
storiesProgressView.setStoryDuration(newduration);
Toast.makeText(getApplicationContext(),"picasso success",Toast.LENGTH_SHORT).show();
//onMyTouchUpEvent();
}
@Override
public void onError(Exception e) {
pb.setVisibility(View.INVISIBLE);
Log.d(TAG,"picasso error");
Toast.makeText(getApplicationContext(),"picasso error , counter",Toast.LENGTH_SHORT).show();
//onMyTouchDownEvent();
}
});
}
else
{
Toast.makeText(getApplicationContext(),"no internet",Toast.LENGTH_SHORT).show();
image.setBackgroundResource(R.color.gray);
image.setImageResource(android.R.drawable.stat_sys_warning);
//Picasso.get().load(url).placeholder(android.R.drawable.stat_sys_warning).into(image);
//storiesProgressView.destroy();
//onMyTouchDownEvent();
//storiesProgressView.pause();
}
}
private void onMyTouchDownEvent() {
isTouched = true;
pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_DOWN, 100,100,0.5f,5,0,1,1,0,0));
}
private void onMyTouchUpEvent() {
isTouched = false;
pause.dispatchTouchEvent(MotionEvent.obtain(0,0,MotionEvent.ACTION_UP, 100,100,0.5f,5,0,1,1,0,0));
}
}
我如何通过触摸操作实现保持。 谢谢
答案 0 :(得分:0)
一旦我执行了此类操作,我知道如何执行此操作。你要做的是,
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// perform you task for button or view is hold
Log.i("TAG", "ACTION_DOWN");
}
if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) {
// perform you task for button or view is released after hold
Log.i("TAG", "ACTION_UP---ACTION_CANCEL");
}
return false;
}
});
我希望这对您有帮助。