- Forum posts: 19
Jul 5, 2016, 9:08:11 PM via Website
Jul 5, 2016 9:08:11 PM via Website
I'm not sure if this is the appropriate thread for this, I'm sorry if it's not.
I am trying to move multiple ImageViews attached to the WindowManager but after adding three views, the movement becomes very choppy.
After some investigation I think this is caused by calling updateViewLayout too many times and on different views.
The code below is a simplified version of what I am trying to do and illustrates the problem.
public class MainActivity extends AppCompatActivity {
WindowManager windowManager;
ArrayList<ImageView> imageViews = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
windowManager = (WindowManager)this.getSystemService(Context.WINDOW_SERVICE);
addImageView();
addImageView();
addImageView();
}
private void addImageView() {
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
ImageView imageView = new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
imageView.setOnTouchListener(new ImageViewTouchListener());
imageViews.add(imageView);
windowManager.addView(imageView, params);
}
private class ImageViewTouchListener implements View.OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_MOVE:
for(ImageView imageView : imageViews) {
WindowManager.LayoutParams params = (WindowManager.LayoutParams)imageView.getLayoutParams();
params.x = (int)event.getRawX();
params.y = (int)event.getRawY();
windowManager.updateViewLayout(imageView, params);
}
return true;
}
return false;
}
}
}
As you can see, I am adding three ImageViews in onCreate, and each ImageView has a TouchListener that updates the layout of every bubble in ACTION_MOVE.
When adding one or two ImageViews, the movement is fluid, but three or more and it lags badly.
Anyone have any ideas? Thank you very much!
Recommended editorial content
With your consent, external content is loaded here.
By clicking on the button above, you agree that external content may be displayed to you. Personal data may be transmitted to third-party providers in the process. You can find more information about this in our Privacy Policy.