Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Подскажите про анимацию векторного изображения

Здравствуйте!
Есть векторная картинка, преобразованная в xml файл.
Задача: растянуть ее за пределы экрана и прикрутить анимацию, что бы она ездила по горизонтали вправо\влево.
С анимацией проблем нет, ездит как надо, а вот растянуть ее не получается Мало того, по бокам даже зазоры между картинкой и экраном остаются, хотя в разметке отступов никаких нет.
Второй день бьюсь, помогите, люди добрые!

Кликните здесь для просмотра всего текста

vector_town.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?xml version="1.0" encoding="utf-8"?>
<animated-vector
    tools:ignore="NewApi"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt"
    xmlns:tools="http://schemas.android.com/tools">
    <aapt:attr name="android:drawable">
        <vector
            android:height="140dp"
            android:viewportHeight="400"
            android:viewportWidth="2500"
            android:width="380dp">
            <group android:name="gear_group">
                <clip-path
                    android:pathData="M0,-29h2577v441h-2577z M 0,0"
                    tools:ignore="VectorRaster"/>
                <path
                    android:fillAlpha="0.7"
                    android:fillColor="#8d8dff"
                    android:pathData="M2513.81,424.05l-2514.1401,0.0l0.0,-47.169983l91.98,0.0l0.0,-37.73001l68.38999,0.0l0.0,-113.20999l56.61,0.0l0.0,113.20999l63.670013,0.0l0.0,-54.25l12.720001,0.0l0.0,-13.049988l80.84,0.0l0.0,13.049988l10.809998,0.0l0.0,53.070007l24.76001,0.0l0.0,-79.600006l40.679993,0.0l0.0,83.130005l12.380005,0.0l0.0,-26.529999l37.149994,0.0l0.0,-45.98999l54.839996,0.0l0.0,63.679993l58.369995,0.0l0.0,-129.13l30.070007,0.0l0.0,-17.690002l155.65997,0.0l0.0,23.0l22.990051,0.0l0.0,130.9l31.839966,0.0l0.0,-31.849976l30.070007,0.0l0.0,31.849976l31.840027,0.0l0.0,-47.75998l70.75995,0.0l0.0,49.51999l0.0,14.149994l40.680054,0.0l28.299927,0.0l0.0,-219.32999l21.230103,0.0l0.0,-12.390007l33.609985,0.0l0.0,14.159996l19.45996,0.0l0.0,175.11002l70.75,0.0l0.0,-99.05002l70.75,0.0l0.0,61.910004l160.96997,0.0l0.0,65.44l70.75,0.0l0.0,-159.19l81.369995,0.0l0.0,125.58002l56.609985,0.0l0.0,37.149994l56.600098,0.0l0.0,-31.839996l28.299927,0.0l0.0,-84.90001l33.609985,0.0l0.0,-23.0l146.81006,0.0l0.0,23.0l31.839966,0.0l0.0,95.509995l28.310059,0.0l0.0,28.309998l35.369995,0.0l0.0,-67.22l160.96985,0.0l0.0,37.149994l139.73999,0.0l0.0,47.76001l77.83008,0.0l0.0,-26.540009l45.98999,0.0l0.0,26.540009l58.370117,0.0l0.0,31.830017l63.67993,0.0l0.0,22.409973l-34.18994,0.0z" android:strokeAlpha="0.13"/>
            </group>
        </vector>
    </aapt:attr>
    <target android:name="gear_group">
        <aapt:attr name="android:animation">
            <set xmlns:android="http://schemas.android.com/apk/res/android"
                 android:ordering="together">
                <objectAnimator
                    android:duration="2000"
                    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                    android:propertyName="translateX"
                    android:repeatCount="infinite"
                    android:repeatMode="reverse"
                    android:startOffset="150"
                    android:valueFrom="0"
                    android:valueTo="150" />
            </set>
        </aapt:attr>
    </target>
</animated-vector>
activity_main6.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
 
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true">
 
        <ImageView
            android:id="@+id/town"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:srcCompat="@drawable/vector_town"
            tools:ignore="ContentDescription"/>
 
    </RelativeLayout>
 
</RelativeLayout>
MainActivity6.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainActivity6
        extends AppCompatActivity {
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main6);
 
        Drawable town = ((ImageView)findViewById(R.id.town)).getDrawable();
        if (town instanceof Animatable) {
            Animatable animatable = ((Animatable) town);
            animatable.start();
        }
    }
 
 
}
Ответ:
Сообщение от ExFau$t
Ещё можно сделать отрицательные отступы у ImageView.
Спасибо, оно вроде!
Вопрос: Векторное изображение

Как подключить векторное изображение в android studio ?
Ответ: kroekt94,
насколько помню из коробки не работает.
Вопрос: Изображение, растянутое по ширине родителя, со скроллом

Кто может подсказать - как отображать изображение, сохраняя пропорции, растянутое по ширине родителя?
Высоты родителя для изображения не хватит, поэтому еще надо добавить скролл.
По сути, мне надо то же самое, что и отображается если сделать так, только еще с добавлением скролла:
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical">
        
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:src="@mipmap/ic_launcher"
            android:layout_weight="1"
            android:layout_alignParentTop="true"
            android:scaleType="centerCrop" />
        <TextView
            android:text="test"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
 
    </LinearLayout>
Пытался запихнуть ImageView в ScrollView, но особых результатов не дало. Кто подскажет, как это сделать?
Можно ли это вообще вделать чисто xml-версткой, или придется переопределять классы виджетов?
Ответ: если я правильно понял
XML
1
2
3
4
5
6
7
8
9
10
11
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:src="@drawable/scrn" />
 
    </ScrollView>
у меня это было вставлено в LinearLayout, картика скролится по вертикали
Вопрос: C# Xamarin Android Как конвертировать изображения Uri в Bitmap

Я вот на пространствах интернета отыскал вот такой способ:
Код Code
1
 Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
При этом у меня вылетает ошибка, мол MainActivity не содержит определения для getContentResolver, ну и не был найден метод решения... Решения этой ошибки найти не могу.

Кто может подсказать, как конвертировать изображения Uri в Bitmap?
Ответ: Попробовал как-то так:
Код C#
1
2
  Bitmap bitmap = MediaStore.Images.Media.GetBitmap(ContentResolver, Android.Net.Uri.FromFile(_file));
                _imageView.SetImageBitmap(bitmap);
Вот только с этим решениям, непонятно по какой причине, после 2-й фотки программа сама закрывается. При этом никакой ошибки не вылетает... Не могу понять в чём проблема...
Код программы:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Data;
using System.IO;
using SQLite;
 
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using SqLiteConnection.DataBaseCreate;
 
using Android.Content.PM;
using Android.Net;
using Android.Graphics;
using Android.Provider;
using Java.Net;
using Android.Media;
using Java.IO; 
 
namespace Test1
{
 
 
    [Activity(Label = "Main_Layout_Activity", Theme = "@android:style/Theme.NoTitleBar")]
            
    public class Main_Layout_Activity : Activity
    {
        
       
 
        Java.IO.File _file;
        Java.IO.File _dir;
        ImageView _imageView;
 
        
        private Button bExit;
        private TextView getTxtViewUser;
        public string myName = MainActivity.MainRef.UserNameGET();
        protected override void OnCreate(Bundle bundle)
        {
 
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main_layout);
 
            getTxtViewUser = FindViewById<TextView>(Resource.Id.textViewUser);
 
            
           // DBRepository dbr = new DBRepository();
           // string userId = dbr.FindUserNameAndId(myName);
            getTxtViewUser.Text = myName;
 
            //Create tabel Image
            //string dbPath = System.IO.Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "ormdemo.db3");
            //var db = new SQLiteConnection(dbPath);
            //db.CreateTable<ImagesTabele>();
 
 
            bExit = FindViewById<Button>(Resource.Id.buttonExit);
            bExit.Click += bExit_Click;
 
             _imageView = FindViewById<ImageView>(Resource.Id.imageView1);
         //    _imageView.SetImageResource(Resource.Drawable.testImage);
 
            if (IsThereAnAppToTakePictures())
            {
                CreateDirectoryForPictures();
 
                Button button = FindViewById<Button>(Resource.Id.buttonCamera);
               
 
                button.Click += TakeAPicture;
 
           
            }
        }
 
        private bool IsThereAnAppToTakePictures()
        {
            Intent intent = new Intent(MediaStore.ActionImageCapture);
            IList<ResolveInfo> availableActivities = PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
            return availableActivities != null && availableActivities.Count > 0;
        }
 
        private void CreateDirectoryForPictures()
        {
            _dir = new Java.IO.File(Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryPictures), "AndroidCameraVSDemo");
            if (!_dir.Exists())
            {
                _dir.Mkdirs();
            }
        }
 
        private void TakeAPicture(object sender, EventArgs eventArgs)
        {
            Intent intent = new Intent(MediaStore.ActionImageCapture);
 
            _file = new Java.IO.File(_dir, String.Format("myPhoto_{0}.jpg", Guid.NewGuid()));
       
            intent.PutExtra(MediaStore.ExtraOutput, Android.Net.Uri.FromFile(_file));
 
            StartActivityForResult(intent, 0);
        }
       Context  c;
        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {
            base.OnActivityResult(requestCode, resultCode, data);
 
            if (resultCode == Result.Canceled) return;
 
            // make it available in the gallery
            Intent mediaScanIntent = new Intent(Intent.ActionMediaScannerScanFile);
           
                Android.Net.Uri contentUri = Android.Net.Uri.FromFile(_file);
 
                
                Bitmap bitmap = MediaStore.Images.Media.GetBitmap(ContentResolver, Android.Net.Uri.FromFile(_file));
                _imageView.SetImageBitmap(bitmap);
                
            
 
 
        }
 
 
 
        void bExit_Click(object sender, EventArgs e)
        {
            Intent intent = new Intent(this, typeof(MainActivity));
            this.StartActivity(intent);
        }
 
 
    }
}
А вот если вместо Bitmap использовать Uri:
Код C#
1
_imageView.SetImageURI(contentUri);
программа не закрывается и работает нормально...
Вопрос: Frame animation или как сделать анимацию

Здравствуйте.

Подскажите, пожалуйста, как сделать анимацию?

У меня есть xml файл, создал под него папку anim и там создал этот xml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
 
    <item android:drawable="@drawable/fire0" android:duration="100" />
    <item android:drawable="@drawable/fire1" android:duration="100" />
    <item android:drawable="@drawable/fire2" android:duration="100" />
    <item android:drawable="@drawable/fire3" android:duration="100" />
    <item android:drawable="@drawable/fire4" android:duration="100" />
    <item android:drawable="@drawable/fire5" android:duration="100" />
    <item android:drawable="@drawable/fire6" android:duration="100" />
    <item android:drawable="@drawable/fire7" android:duration="100" />
    <item android:drawable="@drawable/fire8" android:duration="100" />
    <item android:drawable="@drawable/fire9" android:duration="100" />
    <item android:drawable="@drawable/fire10" android:duration="100" />
    <item android:drawable="@drawable/fire11" android:duration="100" />
    <item android:drawable="@drawable/fire12" android:duration="100" />
    <item android:drawable="@drawable/fire13" android:duration="100" />
    <item android:drawable="@drawable/fire14" android:duration="100" />
    <item android:drawable="@drawable/fire15" android:duration="100" />
    <item android:drawable="@drawable/fire16" android:duration="100" />
    <item android:drawable="@drawable/fire17" android:duration="100" />
    <item android:drawable="@drawable/fire18" android:duration="100" />
    <item android:drawable="@drawable/fire19" android:duration="100" />
 
</animation-list>
Как сделать так, чтобы все 19 картинок по-очереди отрисовались в определенном месте?
Хотя бы просто, как ее вывести?
Ответ: 1. этот файл с animation-list надо перенести в папку drawable
2. предположим в разметке активити у нас есть View к которому мы хотим прикрутить эту анимацию
XML
1
2
3
4
5
    <View
        android:id="@+id/animView"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:background="@drawable/rocket_animation"/>
3. где-то в активити пишем
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
        View view = findViewById(R.id.animView);
        AnimationDrawable animation = (AnimationDrawable) view.getBackground();
        animation.setOneShot(false);
        animation.start();
setObeShot(false) зацикливает анимацию
Вопрос: Анимация фрагментов и активити

Задаю анимацию для фрагментов и активити, но она работает на моём устройстве только в том случае, если в настройках телефона включена анимация. Можно ли в программе включать это дело? Например, на эмуляторе BlueStack не работает анимация при смене активити, но работает при смене фрагментов
Ответ: у меня на блюстаке работает анимация при смене активити
Вопрос: Анимация открытия Activity в Android приложении

Добрый день, как сделать slide анимацию открытия самого первого Activity? Пример: Запускается приложение открывается Activity (с анимацией slide с лева на право) Помогите пожалуйста.
Спасибо.
Ответ: в onCreate() активити, самой первой строчкой! дописать
Java(TM) 2 Platform Standard Edition 5.0
1
overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
это стандартные анимации, если они не устраивают то создать в папке res/anim свои анимации и вписать их имена в этот метод
Вопрос: Не работает анимация если нет фокуса

Первоначально анимируемый элемент (LinearLayout) имеет высоту 0.
При клике на ImageView высота элемента должна плавно измениться, создавая эффект появления элемента. При это нижестоящие Layout плавно свою высоту "вытеснением" анимируемым Layout.
Проблема в том, что анимация срабатывает только тогда, когда TextEdit получил фокус, т.е. когда пользователь кликнул на нем.
Срабатывает т.н. очередь сообщений: если несколько раз кликнуть на ImageView, а потом на TextEdit, то сработает несколько раз анимация появление-исчезновения элемента.

Код

public class ResizeAnimation extends Animation {
    final int targetHeight;
    View view;
    int startHeight;

    public ResizeAnimation(View view, int targetHeight, int startHeight) {
        this.view = view;
        this.targetHeight = targetHeight;
        this.startHeight = startHeight;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newHeight = (int) (startHeight + (targetHeight - startHeight) * interpolatedTime);
        view.getLayoutParams().height = newHeight;
        view.requestLayout();
        view.invalidate();
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }

    @Override
    public boolean willChangeBounds() {
        return true;
    } 
  }

// -----

public void slideIn(View view)
 {
    //Animation animation1 = AnimationUtils.loadAnimation(this.getActivity().getBaseContext(), R.animator.slide);
    //view.startAnimation(animation1);
    view.setVisibility(View.VISIBLE);
   
    ResizeAnimation resizeAnimation = new ResizeAnimation(view, 38, 0); 
    resizeAnimation.setDuration(700); 
    view.startAnimation(resizeAnimation);
 }

Ответ:
Первоначально анимируемый элемент (LinearLayout) имеет высоту 0.
При клике на ImageView высота элемента должна плавно измениться, создавая эффект появления элемента. При это нижестоящие Layout плавно свою высоту "вытеснением" анимируемым Layout.
Проблема в том, что анимация срабатывает только тогда, когда TextEdit получил фокус, т.е. когда пользователь кликнул на нем.
Срабатывает т.н. очередь сообщений: если несколько раз кликнуть на ImageView, а потом на TextEdit, то сработает несколько раз анимация появление-исчезновения элемента.

Код

public class ResizeAnimation extends Animation {
    final int targetHeight;
    View view;
    int startHeight;

    public ResizeAnimation(View view, int targetHeight, int startHeight) {
        this.view = view;
        this.targetHeight = targetHeight;
        this.startHeight = startHeight;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        int newHeight = (int) (startHeight + (targetHeight - startHeight) * interpolatedTime);
        view.getLayoutParams().height = newHeight;
        view.requestLayout();
        view.invalidate();
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }

    @Override
    public boolean willChangeBounds() {
        return true;
    } 
  }

// -----

public void slideIn(View view)
 {
    //Animation animation1 = AnimationUtils.loadAnimation(this.getActivity().getBaseContext(), R.animator.slide);
    //view.startAnimation(animation1);
    view.setVisibility(View.VISIBLE);
   
    ResizeAnimation resizeAnimation = new ResizeAnimation(view, 38, 0); 
    resizeAnimation.setDuration(700); 
    view.startAnimation(resizeAnimation);
 }

Вопрос: При загрузке файла в AsynkTask в строке уведомлений вывести анимацию иконки загрузки

При загрузке файла в AsynkTask хочу в строке уведомлений вывести анимацию иконки загрузки.
Положил в drawable 6 файлов png.
drawable/anim.xml
Код XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false">
    <item android:drawable="@drawable/download_anim0" android:duration="50" />
    <item android:drawable="@drawable/download_anim1" android:duration="50" />
    <item android:drawable="@drawable/download_anim2" android:duration="50" />
    <item android:drawable="@drawable/download_anim3" android:duration="50" />
    <item android:drawable="@drawable/download_anim4" android:duration="50" />
    <item android:drawable="@drawable/download_anim5" android:duration="50" />
</animation-list>
onPreExecute()
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
notificationBuilder.setSmallIcon(R.drawable.anim);          
Notification notification = notificationBuilder.build();
notificationManager.notify(notificationID, notification);
И никакой анимации, только download_anim0. Забыл я что-то сделать?
Ответ: Серьезно, пришел домой, скинул апк на телефон, анимация работает. И читал, что люди такое замечали, правда проверить сразу не мог. Код такой же как в вопросе.
Теперь осталось иконки приличные надыбать)
Вопрос: Остановка анимации

Здравствуйте, мне нужно запрограммировать кнопку(button1) на остановку анимации. Пока получился только старт анимации.
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.graphics.drawable.AnimationDrawable;
import android.view.View.OnClickListener;
 
 
public class MainActivity extends Activity {
 
    public ImageView train;
    private Button start;
    private Button stop;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
    }
    public void start(View v){
        train = (ImageView)findViewById(R.id.train);
        Animation anim = AnimationUtils.loadAnimation(this, R.anim.anim);
        final Button start = (Button) findViewById(R.id.button);
        train.startAnimation(anim);
 
    }
 
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
     
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
       
        int id = item.getItemId();
 
  
        if (id == R.id.action_settings) {
            return true;
        }
 
        return super.onOptionsItemSelected(item);
    }
}
Ответ:
Сообщение от SergeiVasech
Здравствуйте, мне нужно запрограммировать кнопку(button1) на остановку анимации.
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
final Button stop = (Button)findViewById(R.id.bStop);
stop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
train.clearAnimation();
}
});
Писал не в студии, поэтому могут быть ошибки

Добавлено через 1 минуту
На новых версиях Android, вроде, еще так можно:
Код Java(TM) 2 Platform Standard Edition 5.0
1
train.animate().cancel();