Gif 图像视图非常非常滞后
Gif image view very, very laggy
我正在尝试显示 gif 并且它在模拟器中运行良好,但在我的真实设备上它非常滞后。我有一个Samsung Galaxy A3 - 2017
。我尝试了很多库,例如 Glide library
、Ion library
、felipecsl.gifimageview library
,但没有任何效果。我试图显示来自 URL 甚至来自 drawable、raw 和 assets 文件夹的 gif,但什么也没有。有什么想法吗?
目前我的项目中有这个:
布局:
<com.felipecsl.gifimageview.library.GifImageView
android:id="@+id/gifImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomNavBar"/>
主要活动:
public class MainActivity extends AppCompatActivity {
GifImageView gifImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gifImageView = (GifImageView) findViewById(R.id.gifImageView);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavBar);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.back:
Toast.makeText(MainActivity.this, "Previous", Toast.LENGTH_SHORT).show();
break;
case R.id.start:
//Toast.makeText(MainActivity.this, "Start Gif", Toast.LENGTH_SHORT).show();
new RetriveByteArray().execute("http://gifdanceparty.giphy.com/assets/dancers/smooch.gif");
gifImageView.startAnimation();
break;
case R.id.stop:
//Toast.makeText(MainActivity.this, "Stop Gif", Toast.LENGTH_SHORT).show();
gifImageView.stopAnimation();
break;
case R.id.share:
Toast.makeText(MainActivity.this, "Share", Toast.LENGTH_SHORT).show();
break;
case R.id.next:
Toast.makeText(MainActivity.this, "Next", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
检索字节数组:
private class RetriveByteArray extends AsyncTask<String, Void, byte[]>
{
@Override
protected byte[] doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
if (urlConnection.getResponseCode() == 200)
{
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[10240];
while ((nRead = in.read(data, 0, data.length)) != -1)
{
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
gifImageView.setBytes(bytes);
}
}
对于任何想知道我是如何修复它的人(感谢 TGMCians 的回答)
添加依赖项:
compile 'com.facebook.fresco:fresco:1.4.0'
// For animated GIF support
compile 'com.facebook.fresco:animated-gif:1.4.0'
布局:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
/>
主要活动:
public class MainActivity extends AppCompatActivity {
SimpleDraweeView mSimpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri("https://media4.giphy.com/avatars/100soft/WahNEDdlGjRZ.gif")
.setAutoPlayAnimations(true)
.build();
mSimpleDraweeView.setController(controller);
我正在尝试显示 gif 并且它在模拟器中运行良好,但在我的真实设备上它非常滞后。我有一个Samsung Galaxy A3 - 2017
。我尝试了很多库,例如 Glide library
、Ion library
、felipecsl.gifimageview library
,但没有任何效果。我试图显示来自 URL 甚至来自 drawable、raw 和 assets 文件夹的 gif,但什么也没有。有什么想法吗?
目前我的项目中有这个:
布局:
<com.felipecsl.gifimageview.library.GifImageView
android:id="@+id/gifImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/bottomNavBar"/>
主要活动:
public class MainActivity extends AppCompatActivity {
GifImageView gifImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gifImageView = (GifImageView) findViewById(R.id.gifImageView);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavBar);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId())
{
case R.id.back:
Toast.makeText(MainActivity.this, "Previous", Toast.LENGTH_SHORT).show();
break;
case R.id.start:
//Toast.makeText(MainActivity.this, "Start Gif", Toast.LENGTH_SHORT).show();
new RetriveByteArray().execute("http://gifdanceparty.giphy.com/assets/dancers/smooch.gif");
gifImageView.startAnimation();
break;
case R.id.stop:
//Toast.makeText(MainActivity.this, "Stop Gif", Toast.LENGTH_SHORT).show();
gifImageView.stopAnimation();
break;
case R.id.share:
Toast.makeText(MainActivity.this, "Share", Toast.LENGTH_SHORT).show();
break;
case R.id.next:
Toast.makeText(MainActivity.this, "Next", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
检索字节数组:
private class RetriveByteArray extends AsyncTask<String, Void, byte[]>
{
@Override
protected byte[] doInBackground(String... strings) {
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();
if (urlConnection.getResponseCode() == 200)
{
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[10240];
while ((nRead = in.read(data, 0, data.length)) != -1)
{
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(byte[] bytes) {
super.onPostExecute(bytes);
gifImageView.setBytes(bytes);
}
}
对于任何想知道我是如何修复它的人(感谢 TGMCians 的回答)
添加依赖项:
compile 'com.facebook.fresco:fresco:1.4.0'
// For animated GIF support
compile 'com.facebook.fresco:animated-gif:1.4.0'
布局:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
/>
主要活动:
public class MainActivity extends AppCompatActivity {
SimpleDraweeView mSimpleDraweeView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);
setContentView(R.layout.activity_main);
mSimpleDraweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri("https://media4.giphy.com/avatars/100soft/WahNEDdlGjRZ.gif")
.setAutoPlayAnimations(true)
.build();
mSimpleDraweeView.setController(controller);